Перемещение текстового файла в целевую папку при компиляции проекта Maven

17

У меня есть небольшая версия вопроса , которые я сделал недавно. У меня есть проект 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?

    
задан mat_boy 04.05.2013 в 10:44
источник

3 ответа

25

Первый способ заключается в том, чтобы поместить файлы в 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>

Кроме того, поскольку вы можете читать здесь , вы также можете импортировать все ресурсы из каталога «ввода» в «выходной» каталог внутри цели с помощью выделенного плагина, например:

<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>
    
ответ дан JeanValjean 04.05.2013 в 16:48
источник
11

Самый простой способ использования некоторого ресурса, как я знаю (дополнительную информацию о конфигурации ресурсов вы можете найти здесь: Ссылка ):

<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>
    
ответ дан Pavel Uvarov 02.06.2015 в 15:12
источник
4

Чтобы иметь абсолютный контроль над выводом вашей сборки, вы можете использовать «Плагин сборки 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>
    
ответ дан gugol 01.09.2015 в 11:52
источник