情景
一个工程中(或者一个模块【module】)中有两个Main类,希望分别打成jar包。
实现
项目结构
main
java.com.jfqqq
APP1.java
APP2.java
resources
logback-1.xml
logback-2.xml
打成两个包
修改pom.xml,使用maven-jar-plugin插件; 分别在 plugin->executions->execution->configuration->excludes中排除不需要的logback文件:
<build>
<finalName>app</finalName><!--这个是本模块自己的目标名称-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>jfqqq-jar1</id><!--这个是唯一标识ID,不写的话会用默认值,但是这里必须写,因为下方的jar也不写的话就两个相同的默认值冲突了-->
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
<configuration>
<excludes>
<exclude>/logback-2.xml</exclude><!-可以排除的文件,“/
在这里等于代表classpath,也就是项目的resources目录,这里把类2的logback排除,就只剩下logback-1.xml会打包进去了-->
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.jfqqq.APP1</mainClass><!-第一个MAIN class-->
</manifest>
</archive>
<classifier>jfqqq-jar1-qwe</classifier><!-必填,追加在jar包后面形成jar的文件名-->
</configuration>
</execution>
<execution>
<id>jfqqq-jar2</id>
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
<configuration>
<excludes>
<exclude>/logback-1.xml</exclude>
</excludes>
<classifier>jfqqq-jar2-qwe</classifier>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.jfqqq.APP2</mainClass><!-第二个MAIN class-->
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包结果:
2. 各自使用各自的logback.xml
logback默认找的文件名时是logback,而jar包中只有logback-1或logback-2,所以在启动时指定logback.xml就行:
java -jar -Dlogback.configurationFile=logback-1.xml app-jfqqq=jar1-qwe.jar