Подтвердить что ты не робот

Перемещение текстового файла в целевую папку при компиляции проекта 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?

4b9b3361

Ответ 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>