# 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结束进程。

顶部