能否在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
相关产品推荐
相关产品推荐

