You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:27:23