编译Maven项目时将文本文件移动到目标文件夹中
我有一个稍微不同的版本,我最近做的。 我在Netbeans 7.3下有一个Maven项目,它没有任何编译Maven项目时将文本文件移动到目标文件夹中,maven,build-automation,netbeans-7,Maven,Build Automation,Netbeans 7,我有一个稍微不同的版本,我最近做的。 我在Netbeans 7.3下有一个Maven项目,它没有任何build.xml文件来配置构建选项,而有一个pom.xml我用来导入其他库。现在,我在Netbeans 7.3的项目文件夹中存储了一个文本文件(比如textfile.txt),例如 当我编译时,我会得到一个存放jar文件的target文件夹,例如 project folder textfile.txt target classes generated-sources
build.xml
文件来配置构建选项,而有一个pom.xml
我用来导入其他库。现在,我在Netbeans 7.3的项目文件夹中存储了一个文本文件(比如textfile.txt
),例如
当我编译时,我会得到一个存放jar文件的target
文件夹,例如
project folder
textfile.txt
target
classes
generated-sources
....etc
test-classes
MyProject.jar
src
package
package.subpackage
MyClass.java
当我编译Maven项目时,如何将文件textfile.txt复制到目标文件夹下?第一种方法是将文件放入
src/main/resources
文件夹中,该文件夹用于存储已编译的资源,即jar文件中包含的资源(例如图标的图像)
如果需要将配置文件与jar一起分发,但要用jar分隔,则必须编辑pom.xml
文件。一个可能的答案是在
和
标记之间添加以下插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Using env.test.properties</echo>
<copy file="textfile.txt" tofile="${basedir}/target/textfile.txt"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
您还可以使用专用插件将所有资源从“输入”目录导入目标内的“输出”目录,例如:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/output</outputDirectory>
<resources>
<resource>
<directory>input</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
maven资源插件
3.0.1
复制资源
验证
复制资源
${basedir}/target/output
输入
真的
据我所知,使用某些资源的最简单方法(有关资源配置的其他信息,您可以在此处找到:):
真的
${project.basedir}
${project.build.directory}
textfile.txt
要绝对控制构建的输出,可以使用“ApacheMaven汇编插件”。您几乎可以定义所有内容(格式、子文件夹…)
Maven的汇编插件主要用于允许用户将项目输出及其依赖项、模块、站点文档和其他文件聚合到一个可分发的归档文件中
您必须在pom文件中安装插件:
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/yourassembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>x.x</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/yourassembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- append to the packaging phase. -->
<goals>
<goal>single</goal> <!-- goals == mojos -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
maven汇编插件
src/main/assembly/yoursassembly.xml
org.apache.maven.plugins
maven汇编插件
x、 x
src/main/assembly/yoursassembly.xml
组装
包裹
单身
在您的情况下,描述符“yoursassembly.xml”如下所示:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>yourassembly</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.basedir}</directory>
<includes>
<include>README*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>textfile.txt</include>
</includes>
</fileSet>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</fileSets>
</assembly>
你的集会
tar.gz
迪尔
${project.basedir}
自述*
许可证*
通知*
真的
${project.build.directory}
/
*jar先生
${basedir}
/
textfile.txt
解放党
假的
用于构建我的设置文件和更新产品,这对我很有用:
<build>
<resources>
<resource>
<directory>${project.basedir}</directory><!-- from -->
<targetPath>${project.build.directory}</targetPath><!-- to -->
<includes><!-- what -->
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
${project.basedir}
${project.build.directory}
**/*.物业
谢谢!我不确定第一个插件是否正确使用,但效果很好。太棒了,这很有帮助,谢谢JeanValjean!如何确保textfile.txt也被复制到jar文件?我知道了。谢谢,这太容易了。谢谢这应该是最简单的接受答案。我可以设置一个目标列表吗?在我的情况下,我需要复制到多个目标。仅当您显式调用mvn resources:resources
对吗?@djangofan不,它一直有效。它是POM构建描述符的一部分,而不是插件。但是,它会更改此POM中任何构建的默认Maven行为。
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>yourassembly</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.basedir}</directory>
<includes>
<include>README*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>textfile.txt</include>
</includes>
</fileSet>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</fileSets>
</assembly>
<build>
<resources>
<resource>
<directory>${project.basedir}</directory><!-- from -->
<targetPath>${project.build.directory}</targetPath><!-- to -->
<includes><!-- what -->
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>