2009-08-21 19 views
18

Was ist der beste Weg, um eine Java-Anwendung zu erstellen, die mit 'Service' unter Linux ausgeführt werden kann? Ich wollte die JSW-Version here verwenden, kann aber die Lizenz dafür nicht verwenden (die Lizenz ist entweder GPL oder kostet Geld, soweit ich das beurteilen kann). Ich würde eine Lizenz im Apache-Stil brauchen.Tool zum Erstellen eines Java-Daemon-Service unter Linux

Ich benutze Maven zu bauen, also wäre es toll, wenn es möglich wäre, den Service mit einem Maven-Plugin zu erstellen, aber alle anderen Vorschläge wären großartig.

Ich habe Apache Commons Daemon gesehen, gibt es ein Maven-Plugin dafür? Dokumentation scheint spärlich, so ein funktionierendes Beispiel hierfür wäre gut ...

Dank

Antwort

20

Dienste auf Linux sind nur Shell Skripte, die Hintergrundprozesse starten. Schauen Sie in /etc/init.d - Sie können die Dateien in einem Texteditor öffnen. Alles, was Sie brauchen, ist ein Bash-Skript, das auf die Parameter start und stop in geeigneter Weise reagiert (zB start wird Ihren Dienst starten und die Prozess-ID an einem bekannten Ort aufzeichnen, stop wird den Prozess mit der PID aus der von Ihnen erstellten Datei beenden), und legen Sie es dann in /etc/init.d.

Werfen Sie einen Blick auf Init Scripts und An introduction to services, runlevels, and rc.d scripts

13

Soweit ich weiß, dass es kein Maven Plugin entweder Apache Daemon oder Akuma für ist. Obwohl Sie versuchen könnten, sie innerhalb eines Maven-Builds aufzurufen, indem Sie maven-exec-plugin verwenden.


Soweit Ihre Unternehmen Reservierungen über die Verwendung von GPL-lizenzierten Produkte, es lohnt sich über die Auswirkungen der Verwendung Lesen auf. Es ist nicht so virulent wie Unternehmen befürchten. Hier ist ein interpretation of the GPL. Es hat natürlich kein juristisches Gewicht (und ist vielleicht nicht korrekt oder wird von Präzedenzfällen unterstützt, ich bin kein Anwalt), könnte aber ausreichen, um Ihnen zu erlauben, ein Gespräch mit Ihren juristischen Personen zu beginnen.

Von der referenzierten Seite:

einfach mit einem anderen Werk ein urheberrechtlich geschütztes Werk kombiniert wird keine neue abgeleitete Arbeit. Das ursprüngliche urheberrechtlich geschützte Werk muss in irgendeiner Weise modifiziert werden. Das resultierende abgeleitete Werk muss selbst "ein originäres Werk der Urheberschaft darstellen". Wenn also der Lizenznehmer das ursprüngliche GPL-lizenzierte Programm nicht ändert, sondern nur ausführt, erstellt er keine abgeleitete Arbeit.


Es ist die Appassembler Maven plugin dass ich denke, das tut, was man braucht (obwohl es nicht schaffen JSW-Wrapper). Es erstellt ein Shell-Skript (und eine Bat-Datei) und sammelt alle Anwendungs-Jars in einem Verzeichnis. Optional kann configured zum Erstellen von JSW-basierten Daemon-Konfigurationen verwendet werden.

Hier ist eine Beispielkonfiguration, die die eigenständige Anwendung im Ordner target/appassembler generiert und die JSW-Wrapper-Dateien im Verzeichnis target/appassembler/jsw/myApp generiert. Beachten Sie, dass das Assemble-Ziel an die Integrationstestphase gebunden ist, um sicherzustellen, dass das Projekt-JAR erstellt wird. Zur Erzeugung des Ausgabelauf mvn überprüfen oder zu erzeugen, nur der Service-Wrapper läuft mvn Paket:

<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> 

Als Referenz sind die erzeugten Dateien wie folgt:

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 - Danke für die Antworten. Ich hatte ursprünglich so etwas gemacht, aber die Lizenz von JSW ist zu restriktiv für mich (also mein Arbeitgeber!). Ist es übrigens möglich, Appassembler aus dem Hauptprojekt POM für ein Projekt mit mehreren Modulen zu konfigurieren? Die einzige Möglichkeit, dies zu tun, war, ein neues Modul mit der speziellen Aufgabe zu erstellen, die Service-Skripte zu erstellen (und RPM in meinem Fall), die ausgeführt wurden, nachdem alle anderen Module gepackt wurden ... – Lehane

+0

Wenn Sie das Assemble ausführen Ziel auf dem Modul, das von allen anderen abhängt, werden diese Abhängigkeiten in das Verzeichnis appassembler gepackt. Es würde also wahrscheinlich nicht auf Ihrem Aggregator Pom laufen, aber auf dem Modul mit der "Haupt" -Klasse –

+0

ist auch die GPL-Lizenz nicht so restriktiv wie Unternehmen glauben. Lesen Sie hierzu: http://www.sitepoint.com/article/public-license-explained/ –

Verwandte Themen