使用maven-assembly-plugin将一个工程下打包出的两个独立jar放在一个zip中,并在根目录保留一些配置等的文件

5 篇文章 0 订阅

情景

续接这个情景:

使用maven-jar-plugin 插件,将一个有两个入口的java工程打包为两个jar,每个jar有自己的main入口_jfqqqqq的博客-CSDN博客

该情景将一个具备两个入口的工程分别打包了两个独立的jar包。

接下来,我需要把这两个包打进一个zip中,并且zip的根目录中还有一些配置文件等,这些文件都是开发时在工程的resources中存放的。

resources中标红的三个目录希望在zip包的根目录,因为我的这个工程会利用bin下面的命令来分别执行外层的两个jar包。

实现 

pom.xml

	<build>
		<finalName>myApp</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<id>command-jar</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
						<configuration>
							<excludes>
								<exclude>/logback-recall.xml</exclude>
								<exclude>/*bin/**</exclude><!--/*bin无效,还是会保留bin以及下面的所有;/*bin/**会把bin以及下面的所有都排除;/bin/*只会排除bin下面的-->
								<exclude>/*xmls/**</exclude>
								<exclude>/*conf/**</exclude>
								<exclude>/assembly.xml</exclude>
							</excludes>
							<archive>
								<manifest>
									<addClasspath>true</addClasspath>
									<classpathPrefix>lib/</classpathPrefix>
									<mainClass>com.jfqqqq.command.CommandApp</mainClass>
								</manifest>
							</archive>
							<classifier>command-jar</classifier>
					</configuration>
					</execution>
					<execution>
						<id>recaller-jar</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
						<configuration>
							<excludes>
								<exclude>/logback-command.xml</exclude>
								<exclude>/*bin/**</exclude><!--/*bin无效,还是会保留bin以及下面的所有;/*bin/**会把bin以及下面的所有都排除;/bin/*只会排除bin下面的-->
								<exclude>/*xmls/**</exclude>
								<exclude>/*conf/**</exclude>
								<exclude>/assembly.xml</exclude>
							</excludes>
							<classifier>recaller-jar</classifier>
							<archive>
								<manifest>
									<addClasspath>true</addClasspath>
									<classpathPrefix>lib/</classpathPrefix>
									<mainClass>com.jfqqqq.recall.RecallerApp</mainClass>
								</manifest>
							</archive>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<!-- 使用下面的插件进行zip包的打包,该插件可以定义详细的表现行为到一个assembly.xml文件中,该文件在工程的resources里-->
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<finalName>my_app</finalName>
					<descriptors>
						<descriptor>src/main/resources/assembly.xml</descriptor>
					</descriptors>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

assembly.xml

<assembly>
	<id>bin</id>
	<formats>
		<format>zip</format><!-- 打jar包 -->
	</formats>
	<dependencySets><!-- 依赖设置 -->
		<dependencySet>
            <!--是否把本项目添加到依赖文件夹下-->
			<useProjectArtifact>false</useProjectArtifact>
			<outputDirectory>lib</outputDirectory><!-- 把依赖的jar包达到跟录下的bin目录里 -->
			<unpack>false</unpack><!-- 不把依赖jar解压 -->
		</dependencySet>
	</dependencySets>
	<fileSets>
		<fileSet>
			<directory>${project.build.directory}</directory>
			<outputDirectory>/</outputDirectory><!-- 把includes中指定的文件打到根目录 -->
			<includes><!-- 指定包含哪些文件 -->
				<include>*.jar</include><!-- 打包所有jar包 -->
			</includes>
		</fileSet>
		<fileSet>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>*.md</include>
			</includes>
		</fileSet>
		<fileSet><!-- 将src/main/resources下的includes指定的文件全都打进outputDirectory指定的目录 -->
			<directory>src/main/resources</directory>
			<outputDirectory>/</outputDirectory><!-- 根目录 -->
			<includes>
				<include>conf/*</include><!-- conf以及下面的所有文件-->
				<include>bin/*</include>
				<include>xmls/**</include>
			</includes>
		</fileSet>
	</fileSets>
</assembly>

tips:

assembly->dependencySets->dependencySet ->useProjectArtifact的含义是:
是否把本项目添加到依赖文件夹下。

简单的说就是,本项目被打包成jar后(本demo为两个独立的jar)是否也加到lib下边去。

具体的demo感受下(左边是true之后的样子,右边是false之后的样子):

 

效果

 

完成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值