maven - para - netbeans gradle
Mueva un archivo de texto a la carpeta de destino cuando compile un proyecto de Maven (4)
Tengo una versión ligeramente diferente de la pregunta que hice recientemente. Tengo un proyecto de Maven bajo Netbeans 7.3 , que no tiene ningún archivo build.xml
para configurar las opciones de construcción, mientras que existe el pom.xml
que uso para importar otras bibliotecas. Ahora, tengo un archivo de texto (digamos textfile.txt
) almacenado en la carpeta del proyecto en Netbeans 7.3 , por ejemplo
project folder
textfile.txt
src
package
package.subpackage
MyClass.java
Cuando compilo obtengo una carpeta de target
donde se coloca el archivo jar , por ejemplo
project folder
textfile.txt
target
classes
generated-sources
....etc
test-classes
MyProject.jar
src
package
package.subpackage
MyClass.java
¿Cómo puedo hacer que el archivo textfile.txt se copie en la carpeta de destino cuando compilo el proyecto de Maven?
La forma más sencilla es usar algún recurso como sé (información adicional sobre la configuración de recursos que puede encontrar aquí: 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>
Para construir mis archivos de configuración y actualizar la producción, esto funcionó para mí:
<build>
<resources>
<resource>
<directory>${project.basedir}</directory><!-- from -->
<targetPath>${project.build.directory}</targetPath><!-- to -->
<includes><!-- what -->
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
Para tener un control absoluto de la salida de su compilación, puede usar el "Apache Maven Assembly Plugin". Puedes definir casi todo (formato, subcarpetas ...).
El Complemento de ensamblaje para Maven está destinado principalmente a permitir que los usuarios agreguen los resultados del proyecto junto con sus dependencias, módulos, documentación del sitio y otros archivos en un único archivo distribuible.
Tienes que instalar el plugin en tu archivo 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>
En su caso, el descriptor "yourassembly.xml" sería el siguiente:
<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>
Una primera forma es colocar los archivos en src/main/resources
que es la carpeta dedicada a almacenar los recursos cumplidos, es decir, los recursos incluidos en el archivo jar (por ejemplo, imágenes para los iconos).
Si necesita hacer que el archivo de configuración se distribuya con el jar, pero separado por él, debe editar el archivo pom.xml
. Una posible respuesta es agregar el siguiente complemento entre las etiquetas <plugins>
y </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>
Además, como puede leer here , también puede importar todos los recursos de un directorio de "entrada" a un directorio de "salida" dentro del destino mediante el uso del complemento dedicado, por ejemplo:
<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>