web-dev-qa-db-fra.com

Déplacer un fichier texte dans le dossier cible lors de la compilation d'un projet Maven

J'ai une version légèrement différente de la question que j'ai faite récemment. J'ai un projet Maven sous Netbeans 7.3 , qui n'a pas tout build.xml fichier pour configurer les options de construction, alors qu'il y a le pom.xml que j'utilise pour importer d'autres bibliothèques. Maintenant, j'ai un fichier texte (disons textfile.txt) stocké dans le dossier du projet dans Netbeans 7.3, par exemple.

project folder
  textfile.txt
  src
    package
    package.subpackage
      MyClass.Java

Lorsque je compile, j'obtiens un dossier target où le fichier jar est placé, par ex.

project folder
  textfile.txt
  target
    classes
    generated-sources
    ....etc
    test-classes
    MyProject.jar
  src
    package
    package.subpackage
      MyClass.Java

Comment puis-je faire en sorte que le fichier textfile.txt soit copié sous le dossier cible lorsque je compile le projet Maven?

27
mat_boy

Une première façon consiste à placer les fichiers dans src/main/resources qui est le dossier dédié au stockage des ressources respectées, c'est-à-dire les ressources incluses dans le fichier jar (par exemple les images des icônes).

Si vous devez faire en sorte que le fichier de configuration soit distribué avec le pot, mais séparé par lui, vous devez éditer le pom.xml fichier. Une réponse possible est d'ajouter le plugin suivant entre le <plugins> et </plugins> Mots clés.

<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>

De plus, comme vous pouvez le lire ici vous pouvez également importer toutes les ressources d'un répertoire "input" vers un répertoire "output" à l'intérieur de target en utilisant le plugin dédié, par exemple:

<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>
39
JeanValjean

La manière la plus simple, d'utiliser certaines ressources que je connais (des informations supplémentaires sur la configuration des ressources peuvent être trouvées ici: 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>
25
Pavel Uvarov

Pour avoir un contrôle absolu de la sortie de votre build, vous pouvez utiliser le "Plugin d'Assemblage Apache Maven". Vous pouvez définir à peu près tout (format, sous-dossiers ...).

Le plugin d'assemblage pour Maven est principalement destiné à permettre aux utilisateurs d'agréger la sortie du projet avec ses dépendances, modules, documentation de site et autres fichiers dans une seule archive distribuable.

Plus d'informations

Vous devez installer le plugin dans votre fichier 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>

Dans votre cas, le descripteur "yourassembly.xml" serait le suivant:

<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>
5
gugol

Pour créer mes fichiers de configuration et mettre à jour la production, cela a fonctionné pour moi:

<build>
<resources>  
   <resource>
       <directory>${project.basedir}</directory><!-- from -->
       <targetPath>${project.build.directory}</targetPath><!-- to -->
       <includes><!-- what -->
          <include>**/*.properties</include>
       </includes>
    </resource> 
</resources>
</build>
3
leo paz