实用Maven插件 - 打包

背景

工作中经常遇到打包,但往往得过且过,使用命令mvn clean install dDmaven.skip.test=true,一行命令编译完出jar包,手动替换到环境验证就完了。至于jar包在CI构建中如何编译后打包到对应安装包位置,不甚了解。这里介绍maven的简单插件,帮助我们在编译源码出jar包后,如何移动jar包。下面是我工作中遇到maven构建开始疑惑的几个问题:

  1. mvn正常编译后jar包的位置?
  2. 如何编译后将jar包移动到我想要的位置?
  3. 一些静态资源未被打包进jar包怎么办?

插件介绍

首先我们看知识的源头maven插件官网,如下是打包插件总览:
打包插件总览
工作中,一般主要涉及jar、war包相关,于是上述的 jarwar 插件是我们要关注的。后面的 source 插件等一般不涉及。

  1. mvn正常编译后jar包的位置?默认target目录下
    1.1 maven-jar-plugin默认不用声明,即不会在pom.xml的<plugins>...</plugins>中看到。mvn构建生命周期默认携带
    1.2 <packaging>jar</packaging>不管是否直接声明,pom.xml中默认的打包类型就是jar包。
    1.3 compile阶段会编译src/main/java/下的java资源,连带src/main/resources打jar包放置在pom同级的target目录下。
    1.4 source插件 仅用于将源码打入jar包。一般工作中涉及不到。具体的使用可以参考这篇博客《Maven自定义绑定》
  2. 如何编译后将jar包移动到我想要的位置?总共6种方式,前三种较为常见。
    2.1 通过maven-jar-plugin指定outputDirectory输出路径
    2.2 通过maven-resources-plugin指定outputDirectory输出路径
    2.3 通过maven-antrun-plugin复制jar包
2.1 通过maven-jar-plugin指定outputDirectory输出路径
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<!-- 指定打包的jar包输出路径 -->
		<outputDirectory>D:\test</outputDirectory>
		<!--不打入jar包的文件类型或者路径 -->
		<excludes>
			<exclude>**/*.properties</exclude>
			<exclude>**/*.xml</exclude>
			<exclude>**/*.yml</exclude>
			<exclude>static/**</exclude>
			<exclude>templates/**</exclude>
		</excludes>
	</configuration>
</plugin>
2.2 通过maven-resources-plugin指定outputDirectory输出路径
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<executions>
		<execution>
			<id>copy-resources</id>
			<phase>package</phase>
			<goals>
				<goal>copy-resources</goal>
			</goals>
			<configuration>
				<encoding>UTF-8</encoding>
				<!--打成jar包后复制到的路径 -->
				<outputDirectory>
					D:\test1
				</outputDirectory>
				<resources>
					<resource>
						<!--项目中的路径 -->
						<directory>src/main/resources/</directory>
					</resource>
				</resources>
			</configuration>
		</execution>
		<!--可配置多个提取复制路径只需要 “<id>”名字不一样即可 -->
		<execution>
			<id>copy-bulid</id>
			<phase>package</phase>
			<goals>
				<goal>copy-resources</goal>
			</goals>
			<configuration>
				<encoding>UTF-8</encoding>
				<outputDirectory>
					D:\test2
				</outputDirectory>
				<resources>
					<resource>
						<directory>target</directory>
					</resource>
				</resources>
			</configuration>
		</execution>
	</executions>
</plugin>
2.3 通过maven-antrun-plugin复制jar包
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-antrun-plugin</artifactId>
	<version>1.8</version>
	<executions>
		<execution>
			<id>install</id>
			<phase>install</phase>
			<configuration>
				<target>
					<echo message="*******************install*******************" />
					<mkdir dir="${basedir}/target/classes" />
					<copy todir="../target/commons" overwrite="true">
						<fileset dir="${project.build.directory}"
							erroronmissingdir="false">
							<include name="*.jar" />
						</fileset>
					</copy>
					<move file="${project.build.directory}/xxxxxxx.jar"
						tofile="${project.build.directory}/xxx.jar" />
				</target>
			</configuration>
			<goals>
				<goal>run</goal>
			</goals>
		</execution>
		<execution>
			<id>clean</id>
			<phase>clean</phase>
			<configuration>
				<target>
					<echo message="*******************clean*******************" />
					<delete dir="target" />
					<mkdir dir="${basedir}/target/classes" />
				</target>
			</configuration>
			<goals>
				<goal>run</goal>
			</goals>
		</execution>
	</executions>
</plugin>
  1. 一些静态资源未被打包进jar包怎么办?三种方式

Maven AntRun 插件

看这篇就够了,《Ant之build.xml配置详解》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Maven Shade Plugin 是一个 Maven 构建工具的件,可以将项目依赖的所有 jar 包合并成一个可执行的 jar 包,以便于在分发和部署时使用。这个件的常见用法包括: 1. 打包可执行的 jar:将项目依赖的所有 jar 包和项目本身的代码打包成一个可执行的 jar 包,方便在生产环境中部署和执行。 2. 打包成一个不可执行的 jar:将项目依赖的所有 jar 包和项目本身的代码打包成一个不可执行的 jar 包,方便在其他项目中引用和使用。 3. 排除某些依赖:有些依赖可能会引起冲突或者不必要的依赖,可以使用 Maven Shade Plugin 的 exclude 配置项排除这些依赖。 4. 重新定位依赖:有些依赖可能会引用了其他库中的类或资源,导致在合并 jar 包时出现冲突,可以使用 Maven Shade Plugin 的 relocation 配置项将这些依赖的类或资源重新定位到新的包名或路径下。 总之,Maven Shade Plugin 可以让我们更方便地打包和分发项目,并且解决一些依赖冲突的问题,是一个非常实用Maven 件。 ### 回答2: maven-shade-plugin是一个用于Maven项目构建的件,主要用于将Java项目打包成可执行的jar包,解决了传统的jar包依赖冲突和包名冲突的问题。它的常见用法如下: 1. 打包可执行的jar包:通过配置maven-shade-plugin,在项目构建时会将所有依赖的jar包和项目代码打包到一个可执行的jar包中。这样,用户只需要执行生成的jar包即可运行整个项目。 2. 解决传统的jar包依赖冲突:在Java项目中,使用不同的依赖库时可能会引发依赖冲突。maven-shade-plugin可以帮助解决这个问题,他会将项目所依赖的库合并到一个jar包中,避免了传统方式下的依赖冲突。 3. 解决包名冲突:当我们引入了多个依赖库时,这些库中可能存在相同的类或包名,会导致编译错误或运行时的冲突。maven-shade-plugin可以通过重命名包名来解决这个问题,确保在打包后不会出现冲突。 4. 改变jar包中的资源路径:通过配置maven-shade-plugin,可以将项目中的一些资源文件移动到指定的位置,改变其相对路径。 5. 指定启动类:maven-shade-plugin可以通过配置指定启动类,当执行生成的可执行jar包时,会直接调用该类的main方法。 总结来说,maven-shade-plugin是一个非常实用件,能够解决传统的jar包依赖冲突和包名冲突问题,同时也提供了一些其他功能,使得项目的构建更加简洁和方便。 ### 回答3: maven-shade-plugin是Maven生态系统中的一个件,主要用于解决Java项目中的依赖冲突问题和打包问题。 常见的maven-shade-plugin用法有以下几种: 1. 打包包含所有依赖的可执行JAR文件:通过配置maven-shade-plugin件,在打包时将项目的所有依赖打包到一个JAR文件中,并且可以配置主类,使得该JAR文件可以直接执行。 2. 重命名依赖冲突的类:当项目中存在不同版本的依赖库,并且这些依赖库中的某些类具有相同的包和类名时,maven-shade-plugin可以通过重命名类的方式来解决冲突。可以通过配置该件来指定需要重命名的类。 3. 过滤不需要的依赖:有时候项目的依赖中可能会包含一些不需要的、或者与项目功能无关的依赖库,可以使用maven-shade-plugin来过滤这些不需要的依赖,减小项目的包大小。 4. 拷贝资源文件到生成的JAR包中:除了将Java类文件打包到JAR包中,还可以通过maven-shade-plugin来将项目中的资源文件(如配置文件、属性文件等)一同打包到生成的JAR包中。 5. 混淆代码:maven-shade-plugin还可以对项目的代码进行混淆,使得代码难以被反编译,提高代码的安全性。 通过以上常见的用法,maven-shade-plugin可以解决Java项目中的依赖冲突问题和打包问题,让项目能够更好地进行构建和部署。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值