maven 打包的时候,不把class打包到war包的情况

本文讲述了在使用Maven打包时如何确保系统类被编译成jar包,而不是直接放入war包的WEB-INF/classes目录下。通过maven-jar-plugin和maven-war-plugin插件的配置,实现java文件打包为jar,然后在war打包时排除class文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



由于项目的需求,我们系统的部署分两步走,第一,吧项目中,java文件按照不同的类型,进行分类打包(jar包的形式);

接着在吧所有的资源文件,包括打包好的jar包,已war包的形式发布出来。


在这过程中就遇到一个问题,由于系统中所有的包都打成jar包的形式了,那么,在war保重的WEB-INF/classess中,就不应该有系统的class了,因为所有class都已jar

包的形式出包了嘛。


那么首先是吧系统中的java文件,打成jar包,这个是用maven的maven-jar-plugin插件轻易做到,pom.xml文件预语法如下:


<plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-war-plugin</artifactId>
		<version>2.0.2</version>
		<configuration>
			<excludes>**/com/**</excludes>
		</configuration>
	</plugin>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-jar-plugin</artifactId>
		<executions>
			<execution>
				<id>spi-jar</id>
				<phase>package</phase>
				<goals>
					<goal>jar</goal>
				</goals>
				<configuration>
					<classifier>spi-${project.version}</classifier>
					<jarName>scheduling</jarName>
					<includes>
						<include>**/spi/**</include>
					</includes>
				</configuration>
			</execution>
			<execution>
				<id>core-jar</id>
				<phase>package</phase>
				<goals>
					<goal>jar</goal>
				</goals>
				<configuration>
					<classifier>core-${project.version}</classifier>
					<jarName>scheduling</jarName>
					<excludes>
						<exclude>**/spi/**</exclude>
					</excludes>
				</configuration>
			</execution>
		</executions>
	</plugin>
</plugins>

这个pom文件中支出了两个打包任务,分别是:<id> spi.jar </id>和任务 <id>core-jar</id>,其中,第一个任务是将src/main/java中的 
<include>**/spi/**</include> ,也就是spi下目录下的所有文件打包成一个jar包,命名为:scheduling-spi-版本号.jar包的形式。
第二个任务是吧除了<exclude>**/spi/**</exclude>,也就是spi目录的其他目录,都打成另外一个jar包,命名成 scheduling-core-版本号.jar包的形式。

这个两个jar包打完之后,是为后面服务的,以后,将会把这两个jar包放到将来项目打出的war包中的WEB-INF/lib下面,作为依赖。其中,scheduling-spi包还支持发布给第三方进行开发作为依赖使用。

对于 scheduling-core.jar包中的内容,不发布出去,对第三方不可见。


jar包打包完成之后,接下来就进行war包的打包,war包的打包,可以使用maven-war-plugin插件作为打包,然后由于所有java代码实际上已经编译过了,不需要再编译放到war包的classes下面了,所以,在打包的时候,需要将class文件排除在外,pom文件编写如下:


<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-war-plugin</artifactId>
		<version>2.0.2</version>
		<configuration>
			<excludes>**/com/**</excludes>
		</configuration>
	</plugin>

可以看到,在打包war包的时候,会将所有com目录下的文件排除出外,打包之后,war包中将不会包含class文件。

系统的目录结构如下:





打包之后的效果如下:




简单的例子而已。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值