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