情景

一个工程中(或者一个模块【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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐