appassembler-maven-plugin詳解

一直很好奇開源軟件的啓動腳本是怎麼寫出來的,直到最近看到seata pox.xml 才瞭解到有個appassembler-maven-plugi插件非常簡單。可以用過簡單xml配置,就可以將項目打包並且生成多個平臺的啓動腳本,非常簡單、實用,下面我全方位帶大家去了如何去使用它。

介紹插件

根據官網介紹,這個插件主要用於生成啓動 java 應用程序的腳本,能將項目依賴jar能夠打包目錄中,並且它們加入啓動腳本類路徑中。
支持平臺

  • Unix-variants
  • Windows NT (Windows 9x is NOT supported)
  • Java Service Wrapper (JSW) 可以很方便得在各個平臺(windows,linux,max os)管理Java進程,管理JVM,啓動停止,開機啓動,管理內存溢出的異常 標準版還可以發錯誤日誌email,檢測死鎖。官方說明

主要命令:
appassembler:assemble 打包項目並且配置bin 啓動腳本,可以理解爲使用類似spring-boot-maven-plugin打包出來項目,可以通過java -jar 方式啓動項目,但是不支持stop、satus、restart這些操作,比較原始。
appassembler:create-repository 創建一個 appassembler 存儲庫,就是將工程打成jar
appassembler:generate-daemons 生成基於 JSW 的守護進程包裝器,大多數人都是使用這個,重點講。

appassembler:assemble

 <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>
                    <!--是否copy配置文件-->
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <!--從哪裏copy配置文件-->
                    <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                    <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
                    <!--flag 表示直接將jar放到lib 裏面-->
                    <repositoryLayout>flat</repositoryLayout>
                    <encoding>UTF-8</encoding>
                    <logsDirectory>logs</logsDirectory>
                    <tempDirectory>tmp</tempDirectory>
                    <programs>
                        <program>
                            <mainClass>tk.shenyifeng.demo.DemoApplication</mainClass>
                            <id>demo</id>
                            <jvmSettings>
                                <extraArguments>
                                    <extraArgument>-server</extraArgument>
                                    <extraArgument>-Xms256M</extraArgument>
                                    <extraArgument>-Xmx256M</extraArgument>
                                    <extraArgument>-Xss512k</extraArgument>
                                    <extraArgument>-Xloggc:@BASEDIR@/logs/demo_gc.log</extraArgument>
                                    <extraArgument>-verbose:gc</extraArgument>
                                    <extraArgument>-XX:+HeapDumpOnOutOfMemoryError</extraArgument>
                                    <extraArgument>-XX:HeapDumpPath=@BASEDIR@/logs/java_heapdump.hprof</extraArgument>
                                </extraArguments>
                            </jvmSettings>
                        </program>
                    </programs>
                </configuration>
            </plugin>

運行命令 mvn package appassembler:assemble 就可以在target/工程名/下看見打包好的工程,進入bin 目錄可以看見有unix、windows 兩大平臺的運行腳本,但是這個腳本只有啓動工程,不支持stop、restart 。

appassembler:generate-daemons

這個纔是最重要的命令,使用插件都是使用這個生成可以啓動、停止的腳本,方便在多個平臺部署。下面直接貼上xml

            <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>
                    <!--是否copy配置文件-->
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <!--從哪裏copy配置文件-->
                    <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                    <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
                    <binFileExtensions>
                        <unix>.sh</unix>
                        <windows>.bat</windows>
                    </binFileExtensions>
                    <!--flag 表示直接將jar放到lib 裏面-->
                    <repositoryLayout>flat</repositoryLayout>
                    <encoding>UTF-8</encoding>
                    <logsDirectory>logs</logsDirectory>
                    <tempDirectory>tmp</tempDirectory>
                    <daemons>
                        <daemon>
                            <id>demo</id>
                            <mainClass>tk.shenyifeng.demo.DemoApplication</mainClass>
                            <platforms>
                                <platform>jsw</platform>
                            </platforms>
                             可以通過generatorConfigurations 設置腳本平臺
                            <generatorConfigurations>
                                <generatorConfiguration>
                                    <generator>jsw</generator>
                                    <includes>
                                        <include>linux-x86-32</include>
                                        <include>linux-x86-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>

                    <programs>
                        <program>
                            <mainClass>tk.shenyifeng.demo.DemoApplication</mainClass>
                            <id>demoApp</id>
                        </program>
                    </programs>
                </configuration>
            </plugin>

在命令行執行

mvn clean package appassembler:generate-daemons

打包的文件夾在參數 target 設置,如果沒有默認值 ${project.build.directory}/generated-resources/appassembler , 所以生成文件假放在 target\generated-resources\appassembler\ 下。
注意在windows 下執行改腳本需要使用管理員,不然會出現

wrapper | OpenSCManager failed - 拒絕訪問。 (0x5)

首先執行 ,安裝服務

demo.bat install

安裝成功,就可以使用 start 運行服務了

demo.bat start

注意這個插件和spring-boot-maven-plugin 不兼容,會出現無法找到主類異常,主要還是因爲可執行的jar格式在BOOT-INF/classes中打包應用程序類。這意味着當可執行jar用作依賴項時,無法找到它們。遇到這種情況在打包是,去除spring-boot-maven-plugin 即可

項目已經放在GitHub,有興趣自己去查看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章