2009-08-21 15 views
18

पर जावा डिमन सेवा बनाने के लिए टूल एक जावा एप्लिकेशन बनाने का सबसे अच्छा तरीका क्या है जिसे लिनक्स पर 'सेवा' का उपयोग करके चलाया जा सकता है? मैं जेएसडब्ल्यू here उपलब्ध कराने का उपयोग करने जा रहा था, लेकिन उस पर लाइसेंस का उपयोग नहीं कर सकता (लाइसेंस या तो जीपीएल है या जहां तक ​​मैं कह सकता हूं पैसे खर्च करता है)। मुझे एक अपाचे स्टाइल लाइसेंस की आवश्यकता होगी।लिनक्स

मैं मेवेन का निर्माण करने के लिए उपयोग कर रहा हूं, इसलिए मैवेन प्लगइन का उपयोग करके सेवा बनाना संभव था, तो यह बहुत अच्छा होगा, लेकिन कोई अन्य सुझाव बहुत अच्छा होगा।

मैंने Apache Commons Daemon देखा है, क्या इसके लिए एक मेवेन प्लगइन है? प्रलेखन विरल लगता है, इसलिए इस बात का एक काम उदाहरण अच्छा होगा ...

धन्यवाद

उत्तर

20

सेवा बस रहे हैं स्क्रिप्ट जो पृष्ठभूमि प्रक्रियाओं शुरू शैल। /etc/init.d में एक नज़र डालें - आप एक टेक्स्ट एडिटर में फाइलें खोल सकते हैं। आपको बस एक बैश स्क्रिप्ट है जो उचित तरीके से start और stop पैरामीटर का जवाब देती है (उदाहरण के लिए start आपकी सेवा शुरू करेगी और ज्ञात स्थान पर प्रक्रिया आईडी रिकॉर्ड करेगी, stop आपके द्वारा बनाई गई फ़ाइल से पीआईडी ​​के साथ प्रक्रिया को मार देगा), और उसके बाद इसे /etc/init.d में रखें। के रूप में मैं जानता हूँ कि वहाँ या तो अपाचे Daemon या Akuma के लिए एक Maven प्लगइन नहीं है

जहाँ तक Init Scripts और An introduction to services, runlevels, and rc.d scripts

13

पर एक नज़र डालें। हालांकि आप उन्हें maven-exec-plugin का उपयोग कर मेवेन बिल्ड के भीतर से इनकार करने का प्रयास कर सकते हैं।


जहां तक ​​आपकी कंपनियां जीपीएल-लाइसेंस प्राप्त उत्पादों का उपयोग करने के बारे में आरक्षण करती हैं, तो उपयोग के प्रभावों पर पढ़ने के लायक है। निगमों के डर के रूप में यह विषाक्त नहीं है। यहां एक interpretation of the GPL है। इसमें निश्चित रूप से कानून में कोई वज़न नहीं है (और यह सही नहीं हो सकता है या उदाहरण के द्वारा समर्थित नहीं है, मैं वकील नहीं हूं), लेकिन आपके कानूनी लोगों के साथ बातचीत शुरू करने की अनुमति देने के लिए पर्याप्त हो सकता है।

संदर्भित पृष्ठ से

:

, बस एक और काम के साथ एक कॉपीराइट कार्य के संयोजन व्युत्पन्न कार्य बनाने नहीं करता है। मूल कॉपीराइट किए गए काम को किसी भी तरह से संशोधित किया जाना चाहिए। परिणामी व्युत्पन्न कार्य स्वयं ही "लेखकत्व के मूल कार्य का प्रतिनिधित्व करना चाहिए।" इसलिए यदि लाइसेंसधारक मूल जीपीएल-लाइसेंस प्राप्त कार्यक्रम को संशोधित नहीं करता है, लेकिन केवल इसे चलाता है, तो वह व्युत्पन्न कार्य नहीं बना रहा है।


मुझे लगता है कि आप (हालांकि यह जेएसडब्ल्यू रैपर बनाने करता है) क्या आवश्यकता है Appassembler Maven plugin नहीं है। यह एक शेल स्क्रिप्ट (और एक बल्ले फ़ाइल) बनाता है, और सभी अनुप्रयोग जार निर्देशिका में एकत्र करता है। JSW- आधारित डेमॉन कॉन्फ़िगरेशन बनाने के लिए यह वैकल्पिक रूप से configured हो सकता है।

यहां एक उदाहरण कॉन्फ़िगरेशन है जो लक्ष्य/एपसेम्बलर फ़ोल्डर में स्टैंडअलोन एप्लिकेशन उत्पन्न करेगा, और जेएसडब्लू रैपर फ़ाइलों को लक्ष्य/एपसेम्बलर/जेएसडब्ल्यू/myApp निर्देशिका में जेनरेट करेगा। ध्यान दें कि प्रोजेक्ट के जार को सुनिश्चित करने के लिए इकट्ठा लक्ष्य एकीकरण-परीक्षण चरण से जुड़ा हुआ है। उत्पन्न करने के लिए उत्पादन रन mvn को सत्यापित या बस उत्पन्न करने के लिए सेवा रैपर mvn पैकेज चलाएँ:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
     <id>assemble-standalone</id> 
     <phase>integration-test</phase> 
     <goals> 
      <goal>assemble</goal> 
     </goals> 
     <configuration> 
      <programs> 
      <program> 
       <mainClass>name.seller.rich.MyMainClass</mainClass> 
       <name>myShellScript</name> 
      </program> 
      </programs> 
      <platforms> 
      <platform>windows</platform> 
      <platform>unix</platform> 
      </platforms> 
      <!--collect all jars into the lib directory--> 
      <repositoryLayout>flat</repositoryLayout> 
      <repositoryName>lib</repositoryName> 
     </configuration> 
     </execution> 
     <execution> 
     <id>generate-jsw-scripts</id> 
     <phase>package</phase> 
     <goals> 
      <goal>generate-daemons</goal> 
     </goals> 
     <configuration> 
      <!--declare the JSW config --> 
      <daemons> 
      <daemon> 
       <id>myApp</id> 
       <mainClass>name.seller.rich.MyMainClass</mainClass> 
       <commandLineArguments> 
       <commandLineArgument>start</commandLineArgument> 
       </commandLineArguments> 
       <platforms> 
       <platform>jsw</platform> 
       </platforms>    
      </daemon> 
      </daemons> 
      <target>${project.build.directory}/appassembler</target> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

संदर्भ के लिए उत्पन्न फ़ाइलों इस प्रकार हैं:

myApp\bin\myApp 
myApp\bin\myApp.bat 
myApp\bin\wrapper-linux-x86-32 
myApp\bin\wrapper-macosx-universal-32 
myApp\bin\wrapper-solaris-x86-32 
myApp\bin\wrapper-windows-x86-32.exe 
myApp\conf\wrapper.conf 
myApp\lib\libwrapper-linux-x86-32.so 
myApp\lib\libwrapper-macosx-universal-32.jnilib 
myApp\lib\libwrapper-solaris-x86-32.so 
myApp\lib\wrapper-windows-x86-32.dll 
myApp\lib\wrapper.jar 
+0

@Rich - के लिए धन्यवाद जवाब। मैंने मूल रूप से ऐसा कुछ किया था, लेकिन जेएसडब्ल्यू का लाइसेंस मेरे लिए बहुत ही सीमित है (अच्छी तरह से मेरे नियोक्ता!)। वैसे, क्या एकाधिक प्रोजेक्ट वाले प्रोजेक्ट पर मुख्य परियोजना पीओएम से एपसेम्बलर को कॉन्फ़िगर करना संभव है? ऐसा करने का एकमात्र तरीका यह था कि सेवा स्क्रिप्ट (और मेरे मामले में आरपीएम) बनाने के विशिष्ट काम के साथ एक नया मॉड्यूल बनाना था जो अन्य सभी मॉड्यूल पैक किए जाने के बाद भाग गया ... – Lehane

+0

यदि आप इकट्ठा करते हैं मॉड्यूल पर लक्ष्य जो अन्य सभी पर निर्भर करता है, उन निर्भरताओं को appassembler निर्देशिका में पैक किया जाएगा। तो शायद यह आपके एग्रीगेटर पोम पर नहीं चलाया जाएगा, लेकिन "मुख्य" वर्ग –

+0

के साथ मॉड्यूल पर भी जीपीएल लाइसेंस प्रतिबंधित नहीं है क्योंकि निगमों का मानना ​​है। इसका एक पठन लें: http://www.sitepoint.com/article/public-license-explained/ –