情景
续接这个情景:
使用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之后的样子):
效果