# Jsw 部署
JSW(Java Service Wrapper)是一种经过验证的企业级解决方案,极大地简化了Java应用程序在各种平台上的部署、启动和监控。对于Maven工程来说,可以使用appassembler-maven-plugin插件,该插件通过简单xml配置,将工程打包并生成多个平台的启动脚本,支持的平台就包括JSW。
# appassembler-maven-plugin
通过下载中心 (opens new window)下载的Fly Framework后端初始工程中,已默认添加了appassembler-maven-plugin插件配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>2.1.0</version>
<configuration>
<platforms>
<platform>unix</platform>
<platform>windows</platform>
</platforms>
<assembleDirectory>${project.build.directory}/${project.name}</assembleDirectory>
<repositoryName>lib</repositoryName>
<binFolder>bin</binFolder>
<configurationDirectory>conf</configurationDirectory>
<copyConfigurationDirectory>true</copyConfigurationDirectory>
<configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
<binFileExtensions>
<unix>.sh</unix>
<windows>.bat</windows>
</binFileExtensions>
<repositoryLayout>flat</repositoryLayout>
<encoding>UTF-8</encoding>
<logsDirectory>logs</logsDirectory>
<tempDirectory>tmp</tempDirectory>
<programs>
<program>
<mainClass>com.example.demo.DemoApplication</mainClass>
<id>DemoApplication</id>
</program>
</programs>
<daemons>
<daemon>
<id>demo</id>
<mainClass>com.example.demo.DemoApplication</mainClass>
<platforms>
<platform>jsw</platform>
</platforms>
<generatorConfigurations>
<generatorConfiguration>
<generator>jsw</generator>
<includes>
<include>linux-x86-32</include>
<include>linux-x86-64</include>
<include>macosx-universal-32</include>
<include>macosx-universal-64</include>
<include>windows-x86-32</include>
<include>windows-x86-64</include>
</includes>
</generatorConfiguration>
</generatorConfigurations>
<jvmSettings>
<extraArguments>
<extraArgument>-server</extraArgument>
<extraArgument>-Xms256M</extraArgument>
<extraArgument>-Xmx256M</extraArgument>
<extraArgument>-Xss512k</extraArgument>
<extraArgument>-Xloggc:logs/demo_gc.log</extraArgument>
<extraArgument>-verbose:gc</extraArgument>
<extraArgument>-XX:+HeapDumpOnOutOfMemoryError</extraArgument>
<extraArgument>-XX:HeapDumpPath=logs/java_heapdump.hprof</extraArgument>
</extraArguments>
</jvmSettings>
</daemon>
</daemons>
</configuration>
</plugin>
上述包含了所要生成的多种操作系统的运维脚本(启动、停止、查看状态、重启...),以及jvm参数等配置。具体配置功能和完整可配置的内容可以查看官方文档:https://www.mojohaus.org/appassembler/appassembler-maven-plugin/index.html (opens new window)。
需要注意的是,在Spring boot工程中,appassembler-maven-plugin插件不能和我们常用的spring-boot-maven-plugin插件同时打包使用,会导致在执行appassembler-maven-plugin打包生成的启动脚本时,出现找不到主类异常。
以模板工程示范,执行命令打包:
mvn clean package appassembler:generate-daemons -Djsw -Dmaven.test.skip=true
打包成功后,如插件<configuration>配置了<target>,可以在该配置目录下找到/jsw/${project.name}目录,若未配置,可查找如/target/generated-resources/appassember/jsw/${project.name}目录。
目录结构参考如下:
/bin/ - 启动脚本及支持的操作系统
/conf/ - 工程配置目录,内部配置文件的来源,通过 <configurationSourceDirectory> 指定
/lib/ - 存放 jar 依赖包
/logs/ - 日志文件
/tmp/ - 临时文件
进入/bin目录,启动脚本默认一般与${project.name}相同,如Windows系统下执行demo.bat:
> /demo
Usage: demo { console : start : pause : resume : stop : restart : install : remove : status }
根据提示,执行demo console启动,该命令会直接在命令行中打印启动日志,通过ctrl+c结束进程。