Java笔记之 Maven打包 package 无依赖可执行的单个jar包

前言

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>

一些链接

maven-shade-plugin入门指南

maven-assembly-plugin和maven-shade-plugin打包区别及弊端

maven打包之assembly和shade对比

Maven生成可以直接运行的jar包的多种方式

Maven Springboot 项目打包jar包,在pom指定名称,指定时间戳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值