Перемещение текстового файла в целевую папку при компиляции проекта Maven
У меня есть небольшая другая версия вопроса, которую я сделал недавно.
У меня есть проект Maven в Netbeans 7.3, у которого нет файла build.xml
для настройки параметров здания, а есть pom.xml
, который я использую для импорта другие библиотеки. Теперь у меня есть текстовый файл (скажем, textfile.txt
), хранящийся в папке проекта в Netbeans 7.3, например
project folder
textfile.txt
src
package
package.subpackage
MyClass.java
При компиляции я получаю папку target
, в которую помещается файл jar, например
project folder
textfile.txt
target
classes
generated-sources
....etc
test-classes
MyProject.jar
src
package
package.subpackage
MyClass.java
Как сделать файл textfile.txt скопированным в целевой папке при компиляции проекта Maven?
Ответы
Ответ 1
Первый способ - поместить файлы в src/main/resources
, который является папкой, предназначенной для хранения соответствующих ресурсов, то есть ресурсов, включенных в файл jar (например, изображений для значков).
Если вам нужно сделать файл конфигурации распределенным с банкой, но разделенным им, вы должны отредактировать файл pom.xml
. Возможным ответом является добавление следующего плагина между тегами <plugins>
и </plugins>
.
<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>
Кроме того, поскольку вы можете читать здесь, вы также можете импортировать все ресурсы из каталога "input" в каталог "output" внутри цели используя выделенный плагин, например:
<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>
Ответ 2
Самый простой способ использовать какой-то ресурс, как я знаю (дополнительную информацию о конфигурации ресурсов вы можете найти здесь: https://maven.apache.org/plugins/maven-resources-plugin/):
<build>
<plugins>
<!-- your plugins, including or not maven-resource-plugin -->
</plugins>
<resources>
<resource>
<filtering>true</filtering><!-- if it is neccessary -->
<directory>${project.basedir}</directory><!-- from -->
<targetPath>${project.build.directory}</targetPath><!-- to -->
<includes><!-- what -->
<include>textfile.txt</include>
</includes>
</resource>
</resources>
</build>
Ответ 3
Чтобы иметь абсолютный контроль над выводом вашей сборки, вы можете использовать "Плагин сборки Apache Maven". Вы можете определить почти все (формат, подпапки...).
Плагин сборки для 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>
В вашем случае дескриптор "yourassembly.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>