能否用单个pom.xml打包多个同级类并独立生成对应Jar包?
可行解决方案
方案1:利用Maven Profiles绑定单独打包逻辑
为每个需要独立打包的类创建专属Profile,在Profile内配置maven-assembly-plugin(或maven-jar-plugin)的执行逻辑,精准指定目标类。通过命令行指定Profile,即可单独生成对应类的Jar包。
示例POM配置片段:
<profiles> <profile> <id>build-classA</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>package-classA</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <mainClass>com.yourpkg.ClassA</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>classA-${project.version}</finalName> <includes> <include>com/yourpkg/ClassA.class</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>build-classB</id> <!-- 复制ClassA的配置,替换ClassB的全限定名和输出文件名即可 --> </profile> </profiles>
使用方式:
# 仅打包ClassA的Jar mvn clean package -Pbuild-classA # 仅打包ClassB的Jar mvn clean package -Pbuild-classB
方案2:通过动态属性指定目标类
定义一个自定义Maven属性,在打包插件配置中引用该属性,实现通过命令行动态传入要打包的类,无需为每个类写重复配置。
示例POM配置片段:
<properties> <!-- 可设置默认值,或留空强制命令行传入 --> <target.class></target.class> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>package-single-class</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <mainClass>${target.class}</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>${target.class}-${project.version}</finalName> <!-- 将类全限定名的点替换为路径分隔符,适配类文件路径 --> <includes> <include>${target.class.replace('.', '/')}.class</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build>
使用方式:
# 打包指定类的Jar,替换为你的类全限定名 mvn clean package -Dtarget.class=com.yourpkg.ClassC
补充说明
- 若不需要打包依赖,可将
descriptorRefs替换为普通Jar配置,或改用maven-jar-plugin配合includes规则。 - 方案1适合类数量固定、需快速切换打包目标的场景;方案2更灵活,适配类数量较多或动态打包的需求。
- 注意类路径的正确性:
includes中的路径需将包名的.替换为/,方案2的replace语法需Maven 3.5及以上版本支持。
内容的提问来源于stack exchange,提问作者Mateusz Wołek
相关产品推荐
相关产品推荐

