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

能否在pom.xml中两次使用outputDirectory?Maven多目录导出Jar咨询

解决Maven构建时将Jar导出到两个目录的问题

你当前的写法有问题:在同一个<execution>里重复配置<outputDirectory>,Maven会自动覆盖重复的配置项,只保留最后一个,所以第一个目录不会生效。

要实现将Jar导出到两个不同目录完全可行,正确做法是给maven-resources-plugin配置两个独立的执行单元,每个单元对应一个输出目录,具体配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <!-- 第一个执行单元:复制Jar到第一个目录 -->
                <execution>
                    <id>copy-to-first-dir</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>C:\My\First\Directory\Folder</outputDirectory>
                        <resources>
                            <resource>
                                <!-- 用Maven内置变量指向默认打包目录,避免硬编码绝对路径 -->
                                <directory>${project.build.directory}</directory>
                                <filtering>false</filtering>
                                <!-- 用内置变量引用Jar文件名,适配不同项目 -->
                                <includes>
                                    <include>${project.build.finalName}.jar</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
                <!-- 第二个执行单元:复制Jar到第二个目录 -->
                <execution>
                    <id>copy-to-second-dir</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>C:\My\Second\Directory\Folder</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.build.directory}</directory>
                                <filtering>false</filtering>
                                <includes>
                                    <include>${project.build.finalName}.jar</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

关键细节:

  • 每个<execution>必须设置唯一的<id>,Maven通过ID区分不同的执行任务
  • 两个执行单元都绑定到package阶段,执行mvn package时会自动触发两次复制操作
  • 用Maven内置变量替代硬编码路径/文件名,让配置更通用、易维护:
    • ${project.build.directory}:对应项目的target目录(Maven默认Jar打包位置)
    • ${project.build.finalName}:对应Jar文件的基础名称(由pom.xml的<finalName>定义,默认是artifactId-version)

执行mvn clean package后,Jar文件会被同时复制到两个指定目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:31