用于在Linux上创建Java守护进程服务的工具
创建可以在Linux上使用“服务”运行的java应用程序的最佳方法是什么?我本来打算使用JSW,但不能在上面使用许可证(许可证要么是GPL,要么就我所知是要花钱的)。我需要一个apache风格的许可证 我正在使用maven进行构建,因此,如果能够使用maven插件创建服务,那将是非常棒的,但是任何其他建议都将是非常棒的 我看到了,有maven插件吗?文档似乎很稀少,所以这方面的一个工作示例将是很好的用于在Linux上创建Java守护进程服务的工具,java,linux,maven-2,maven-plugin,daemon,Java,Linux,Maven 2,Maven Plugin,Daemon,创建可以在Linux上使用“服务”运行的java应用程序的最佳方法是什么?我本来打算使用JSW,但不能在上面使用许可证(许可证要么是GPL,要么就我所知是要花钱的)。我需要一个apache风格的许可证 我正在使用maven进行构建,因此,如果能够使用maven插件创建服务,那将是非常棒的,但是任何其他建议都将是非常棒的 我看到了,有maven插件吗?文档似乎很稀少,所以这方面的一个工作示例将是很好的 谢谢您可以查看以下项目 Linux上的服务只是启动后台进程的shell脚本。查看/etc/
谢谢您可以查看以下项目
- Linux上的服务只是启动后台进程的shell脚本。查看
/etc/init.d
——您可以在文本编辑器中打开文件。您只需要一个bash脚本,它以适当的方式响应参数start
和stop
(例如start
将启动您的服务并在已知位置记录进程ID,stop
将使用您创建的文件中的PID终止进程),然后将其放置在/etc/init.d
中
请看一看,据我所知,Apache守护程序或应用程序都没有Maven插件。尽管您可以尝试通过使用从Maven构建中调用它们
就您的公司对使用GPL许可产品的保留而言,关于使用GPL许可产品的含义值得一读。它并不像企业担心的那样恶毒。这是一个例子。当然,它在法律上没有任何分量(可能是不正确的,也可能没有先例支持,我不是律师),但可能足以让你开始与你的律师对话 从参考页面: 简单地将一个受版权保护的作品与另一个作品相结合并不能创造衍生作品。原版权作品必须以某种方式进行修改。由此产生的衍生作品本身必须“代表原创作品”。因此,如果被许可人不修改原始GPL许可程序,而只是运行该程序,他就不是在创作衍生作品
我认为有一种方法可以满足您的需要(尽管它确实创建了JSW包装器)。它创建一个shell脚本(和一个bat文件),并将所有应用程序jar收集到一个目录中。可以选择创建基于JSW的守护程序配置 下面是一个示例配置,它将在target/appassembler文件夹中生成独立应用程序,并在target/appassembler/JSW/myApp目录中生成JSW包装文件。注意,组装目标绑定到集成测试阶段,以确保创建项目的jar。要生成输出运行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>
@里奇-谢谢你的回答。我本来是这样做的,但是JSW的许可证对我来说太严格了(我的雇主!)。顺便问一下,是否可以在具有多个模块的项目上从主项目POM配置Appassembler?我能想到的唯一方法是创建一个新模块,具体任务是创建服务脚本(在我的例子中是RPM),该脚本在所有其他模块打包后运行……如果在依赖于所有其他模块的模块上运行组装目标,则这些依赖项将打包在appassembler目录中。因此,它可能不会在聚合器pom上运行,但在具有“main”类的模块上,GPL许可证也不像公司通常认为的那样具有限制性。读一读:非常有用。尽管仅供参考,但有一个关于如何在pom中设置appassembler以构建服务的最新示例,可在此处获得:。在正确安装/运行JSW服务之前,我必须遵循该示例。
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