前言
Maven默认打包的jar没法执行
若希望像springboot那样打包成1个可执行的jar要用到maven-assembly-plugin插件
在properties中设置timestamp的格式
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.build.timestamp.format>yyMMddHHmm</maven.build.timestamp.format>
</properties>
使用maven-assembly-plugin插件打包
在項目的pom.xml中加入👇
<build>
<!-- <finalName>自定义jar名字</finalName> -->
<finalName>
${project.artifactId}-${project.version}-${maven.build.timestamp}
</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<!-- 这里要修改 , 指定程序入口主类 -->
<mainClass>zbza.QuartzDemo1.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
双空格版👇
<build>
<!-- <finalName>自定义jar名字</finalName> -->
<finalName>
${project.artifactId}-${project.version}-${maven.build.timestamp}
</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<!-- 这里要修改 , 指定程序入口主类 -->
<mainClass>zbza.QuartzDemo1.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然後package打包
会生成两个文件, 1个原版, 1个无依赖可执行
使用maven-shade-plugin插件也行
<build>
<!-- <finalName>自定义jar名字</finalName> -->
<finalName>
${project.artifactId}-${project.version}-${maven.build.timestamp}
</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>zbza.QuartzDemo1.Cron</mainClass>
</transformer>
</transformers>
<!-- 最小化,排除不使用的类 -->
<!-- 发现打包可执行jar时不能用最小化,会缺失类<minimizeJar>true</minimizeJar> -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果打包遇到java版本问题,可以修改setting.xml文件,点击这段文字查看范例. 或者在项目pom.xml加入以下内容 👇 二选一即可
1.指定properties
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<java.version>1.8</java.version>
</properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<java.version>1.8</java.version>
2.指定编译
<build>
<plugins>
<!-- java编译插件, 编译Java代码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version><!--$NO-MVN-MAN-VER$ -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding><!-- 指定编码格式,否则在DOS下运行mvn compile命令时会出现莫名的错误,因为系统默认使用GBK编码 -->
</configuration>
</plugin>
<!-- 资源文件拷贝插件,处理资源文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version><!--$NO-MVN-MAN-VER$ -->
<configuration>
<encoding>UTF-8</encoding><!-- 指定编码格式,否则在DOS下运行mvn命令时当发生文件资源copy时将使用系统默认使用GBK编码 -->
</configuration>
</plugin>
</plugins>
</build>
指定jar包名并加时间戳
springboot默认jar包名是artifactId加横杆加version
可以自己定制, 例如:👇
1.在properties中指定日期格式
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.build.timestamp.format>yyMMddHHmm</maven.build.timestamp.format>
</properties>
2.在build标签下的finalName标签中指定
<build>
<finalName>
${project.artifactId}-${project.version}-${maven.build.timestamp}
</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}/finalName>