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

使用Maven Jar插件生成多Jar包时无法添加指定XML资源问题

解决Maven多Jar打包时XML文件未纳入对应Jar的问题

我来帮你搞定这个XML没进Jar的问题!核心问题有两个:你当前的Jar插件配置只包含了编译后的class文件,没覆盖XML;另外如果XML是放在src/main/java的包结构里(而非默认的src/main/resources),Maven默认不会把这些XML复制到编译输出目录,Jar插件自然找不到它们打包进去。

下面分两步解决:

1. 配置资源插件,把XML同步到编译目录

如果你的XML是在src/main/java的包路径下,先添加maven-resources-plugin配置,让它把这些XML复制到target/classes对应的位置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
    <executions>
        <execution>
            <id>copy-java-resources</id>
            <phase>process-resources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                <resources>
                    <resource>
                        <directory>${project.build.sourceDirectory}</directory>
                        <includes>
                            <include>**/*.xml</include>
                        </includes>
                        <filtering>false</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

这个配置会在process-resources阶段,把src/main/java下所有XML文件同步到编译输出目录,和class文件放在对应包路径下。如果你的XML本来就在src/main/resources里,这一步可以省略。

2. 修改Jar插件配置,纳入对应XML文件

因为你用了<includes>做精确的文件匹配,所以必须把XML路径也加到每个execution的规则里,确保对应Jar能包含目标XML:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>tra_common_id</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <finalName>tra_common</finalName>
                <encoding>ISO-8859-1</encoding>
                <classifier>tra_common</classifier>
                <includes>
                    <include>com/**/common/**</include>
                    <include>com/**/apm/*Access*</include>
                    <!-- 加入common和apm包下的XML -->
                    <include>com/**/common/**/*.xml</include>
                    <include>com/**/apm/*Access*.xml</include>
                </includes>
                <excludes>
                    <exclude>com/**/management/**</exclude>
                </excludes>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                </archive>
            </configuration>
        </execution>
        <execution>
            <id>tra_client_id</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <finalName>tra_client</finalName>
                <encoding>ISO-8859-1</encoding>
                <classifier>tra_client</classifier>
                <includes>
                    <include>com/**/client/**</include>
                    <!-- 加入client包下的XML -->
                    <include>com/**/client/**/*.xml</include>
                </includes>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

完成配置后,执行mvn clean package,解压生成的Jar包就能看到对应的XML文件已经在正确的包路径下了。

内容的提问来源于stack exchange,提问作者harimper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:47:12