maven assembly打包生成Java应用启动脚本bat和sh的方法
靖节先生 人气:21. maven插件介绍
springboot应用通过maven插件appassembler-maven-plugi生成启动脚本bat和sh。根据官网介绍,这个插件主要用于生成启动 java应用程序的脚本,能将项目依赖jar能够打包目录中,并且它们加入启动脚本类路径中。
主要命令
appassembler:assemble 打包项目并且配置bin 启动脚本,可以理解为使用类似spring-boot-maven-plugin打包出来项目,可以通过java -jar 方式启动项目,但是不支持stop、satus、restart这些操作,比较原始。
appassembler:create-repository 创建一个 appassembler 存储库,就是将工程打成jar
appassembler:generate-daemons 生成基于 JSW 的守护进程包装器,大多数人都是使用这个。
参考文档
appassembler-maven-plugin 插件为 SpringBoot 项目生成启动脚本
https:
2. 生成启动脚本
2.1 创建springboot应用
2.2 创建启动测试类
MavenAssemblyDemoApplication
package com.zrj.maven.assembly.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * MavenAssemblyDemoApplication * * @author zrj * @since 20221117 */ @RestController @SpringBootApplication public class MavenAssemblyDemoApplication { public static void main(String[] args) { SpringApplication.run(MavenAssemblyDemoApplication.class, args); } /** * Hello World! * If you open a web browser to localhost:8080, you should see the following output: * * @see 1 https://docs.spring.io/spring-boot/docs/2.7.5/reference/htmlsingle/ */ @RequestMapping("/") String home() { long currentTime = System.currentTimeMillis(); String helloTime = currentTime + ":Hello World!"; System.out.println(helloTime); return helloTime; } }
2.3 maven依赖配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zrj</groupId> <artifactId>maven-assembly-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <name>maven-assembly-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- appassembler-maven-plugin插件自动生成java项目启动脚本sh或者bat--> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>2.1.0</version> <!-- 如果不配置 generate-daemons,则打包命令为 mvn clean package appassembler:assemble --> <!-- 如果配置了 generate-daemons,打包命令可以是 mvn clean package 也可以是 mvn clean package appassembler:assemble --> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assemble</goal> </goals> </execution> </executions> <configuration> <!-- flat与lib共同决定将项目用的的所有jar包复制到lib目录下 --> <repositoryLayout>flat</repositoryLayout> <!--从哪里copy配置文件--> <configurationSourceDirectory>src/main/resources</configurationSourceDirectory> <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> <!--是否copy配置文件--> <copyConfigurationDirectory>true</copyConfigurationDirectory> <!--生成的项目的目录位置,这里的client是项目的名称,你可以根据你的需要自己随便命名--> <assembleDirectory>${project.build.directory}/client</assembleDirectory> <!--配置文件存放在conf目录路径--> <configurationDirectory>conf</configurationDirectory> <!-- 打包的jar,以及maven依赖的jar放到这个目录里面 --> <repositoryName>lib</repositoryName> <!-- 可执行脚本的目录 --> <binFolder>bin</binFolder> <!-- 生成linux, windows两种平台的执行脚本 --> <platforms> <platform>windows</platform> <platform>unix</platform> </platforms> <!-- 针对不同平台生成不同类型的启动脚本 --> <binFileExtensions> <unix>.sh</unix> <windows>.bat</windows> </binFileExtensions> <!--编码,日志--> <encoding>UTF-8</encoding> <logsDirectory>logs</logsDirectory> <tempDirectory>tmp</tempDirectory> <!--java启动参数--> <extraJvmArguments>-Xms128m</extraJvmArguments> <programs> <program> <!--指定主类,脚本名。会生成shell/bat两种类型,也可用platforms指定运行平台--> <mainClass>com.zrj.maven.assembly.demo.MavenAssemblyDemoApplication</mainClass> <!-- 生成的脚本文件的名称,比如start.sh,你也可以根据你的需要命名成其他名字 --> <name>start</name> </program> </programs> </configuration> </plugin> </plugins> </build> </project>
3. 测试验证
3.1 执行命令
执行命令或者使用idea
执行命令:maven install
idea:maven-lifecycle依次执行clean,install
3.2 生成脚本
|—— target | |—— client | | |—— bin | | | |—— start.sh # linux平台下的启动脚本 | | | |—— start.bat # windows平台下的启动脚本 | |—— conf | | |—— application.properties # 项目配置文件 | |—— lib | | |—— 各种依赖jar包 | |—— logs | |—— tmp
3.3 启动脚本验证
./start.bat 或者./start.sh
浏览器访问:http://localhost:8080/
刷新页面:1668682483758:Hello World!
加载全部内容