如何使用Maven创建目录并复制JAR包及资源文件至指定目录
解决Maven迁移中自定义目录结构与文件复制的问题
方案1:使用maven-resources-plugin处理资源复制与目录创建
这个插件可以通过配置资源集,自动创建目标目录并复制指定文件,完美适配你的需求。在pom.xml中添加如下配置:
<build> <plugins> <!-- 复制自定义脚本资源到目标目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-scripts</id> <phase>install</phase> <!-- 和install阶段同步执行 --> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>/usr/local/myFoo/spam/bar/scripts</outputDirectory> <resources> <resource> <directory>src/foo/bar/scripts</directory> <includes> <include>**/*</include> <!-- 递归复制所有文件和子目录 --> </includes> </resource> </resources> </configuration> </execution> <!-- 编译生成的JAR包复制到Tomcat lib目录 --> <execution> <id>copy-jar-to-tomcat</id> <phase>install</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>/usr/local/tomcat/webapps/fooApp/WEB-INF/lib</outputDirectory> <resources> <resource> <directory>${project.build.directory}</directory> <includes> <include>*.jar</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 关键配置说明:
phase设为install,确保和你提到的install mojo同步执行directory指定源文件路径,outputDirectory为目标路径,插件会自动创建不存在的目录includes用于筛选复制文件,**/*表示递归复制目录下所有内容
方案2:使用maven-antrun-plugin复用Ant原有逻辑
如果你之前的Ant脚本已经有成熟的目录创建和文件复制逻辑,可以直接在Maven中调用Ant任务,减少重新配置的工作量:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>run-custom-ant-tasks</id> <phase>install</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <!-- 创建目标目录 --> <mkdir dir="/usr/local/myFoo/spam/bar/scripts"/> <mkdir dir="/usr/local/tomcat/webapps/fooApp/WEB-INF/lib"/> <!-- 复制脚本文件 --> <copy todir="/usr/local/myFoo/spam/bar/scripts"> <fileset dir="src/foo/bar/scripts" includes="**/*"/> </copy> <!-- 复制JAR包 --> <copy todir="/usr/local/tomcat/webapps/fooApp/WEB-INF/lib"> <fileset dir="${project.build.directory}" includes="*.jar"/> </copy> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 优势:直接沿用Ant的
mkdir和copy任务,逻辑和原有Ant脚本完全一致,学习成本低
实用提示
- 目标路径尽量使用Maven内置属性(如
${user.home})代替硬编码,提升配置可移植性 - 若需区分开发/生产环境,可结合Maven Profiles配置不同的目标路径
- 执行
mvn install时,插件会自动完成目录创建和文件复制,无需额外命令
内容的提问来源于stack exchange,提问作者RichardFeynman
相关产品推荐
相关产品推荐

