2010-10-22 20 views
37

Estoy intentando encontrar una forma de copiar un archivo de recursos a un nuevo nombre en el directorio de destino en una compilación Maven. Casi todo lo que he encontrado durante la búsqueda sugiere soluciones que implican múltiples subdirectorios en /src/main/resources y seleccionando entre ellos a través de perfiles. Sin embargo, en mi caso, esto no resuelve el problema, a saber, que el archivo que quiero tiene un nombre "mágico".Renombrar recursos en Maven

Básicamente lo que quiero hacer es hacer que un archivo /src/main/resources/default.DS_Store se copie en ${project.build.directory}/.DS_Store. Dado que el archivo .DS_Store tiene un significado especial en Mac OSX, no es deseable tener un archivo con ese nombre en el árbol de origen y en el control de la versión. Sin embargo, sí quiero que los datos en el archivo estén en el árbol de origen y en el control de la versión, y que se renombre al nombre "mágico" durante la compilación.

Estoy empezando a pensar que la hormiga es la única forma de hacerlo automáticamente. ¿Hay alguna manera más fácil?

+0

http://maven.apache.org/plugins/maven-resources-plugin/ Esto podría ayudarlo, –

+5

El complemento de recursos no permite el cambio de nombre. Ese es mi problema. – wmorrell

+0

También puede ver http://maven.apache.org/plugins/maven-assembly-plugin/. Pero no estoy seguro de que pueda cambiar el nombre de los archivos: nunca utilicé este complemento de esta manera. –

Respuesta

15

veo 2 opciones para resolver su problema:

+2

Fui con el plugin antrun, con una ejecución en la fase de preparación del paquete para crear el '.DS_Store' renombrado, y otra en fase de verificación para eliminarlo (por si acaso ...). Parece que está funcionando, ¡gracias! – wmorrell

12

Usted puede evitar la cabeza por encima de la hormiga con la Maven Assembly plugin y la file assembly descriptor.

+0

No compatible con los conjuntos de archivos. Por lo tanto, no puede aplicar un patrón al mismo :( – BeepDog

+0

El cambio de nombre de archivo se puede realizar con los conjuntos de dependencias en el plugin de ensamblaje. – mojoken

+7

podría dar un ejemplo?¡Hay mucha documentación allí! –

14

Ejemplo de uso del plugin montaje para copiar y/o cambiar el nombre de un archivo:

archivo pom: archivo

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2.1</version> 
     <configuration> 
      <descriptors> 
      <descriptor>src/main/descriptors/example.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Descriptor:

<?xml version="1.0" encoding="UTF-8"?> 
<assembly> 
     <id>example</id> 
     <formats> 
       <format>dir</format> 
     </formats> 
     <files> 
       <file> 
        <source>src/main/resources/something.properties</source> 
        <outputDirectory>/</outputDirectory> 
        <destName>something.properties</destName> 
       </file> 
       <file> 
        <source>src/main/resources/something.properties</source> 
        <outputDirectory>/</outputDirectory> 
        <destName>something_en.properties</destName> 
       </file> 
     </files> 
</assembly> 
+2

Desafortunadamente, parece que no admite wildcard *. Me gustaría poder hacer SMT como/main/resources/*. propiedades src $ {source} -suffix CuongHuyTo

21

Uso de la antRun-experto-plugin lo hace fácil, pero en caso de que esté buscando una forma más mavenish que sea compatible con eclipse m2e, entonces puede usar el copy-rename-maven-plugin

<plugin> 
    <groupId>com.coderplus.maven.plugins</groupId> 
    <artifactId>copy-rename-maven-plugin</artifactId> 
    <version>1.0.1</version> 
    <executions> 
     <execution> 
     <id>rename-file</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>rename</goal> 
     </goals> 
     <configuration> 
      <sourceFile>${project.build.outputDirectory}/default.DS_Store</sourceFile> 
      <destinationFile>${project.build.outputDirectory}/.DS_Store</destinationFile> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Y en caso de tener cualquier comentario/problemas con el plugin, puede llegar a https://github.com/coderplus/copy-rename-maven-plugin/

6

he tenido el mismo problema con la copia de cambio de nombre-experto-plugin resuelto mi problema

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>com.coderplus.maven.plugins</groupId> 
     <artifactId>copy-rename-maven-plugin</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
      <id>copy-file</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <sourceFile>src/someDirectory/test.environment.properties</sourceFile> 
       <destinationFile>target/someDir/environment.properties</destinationFile> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

Cuál es la diferencia de @coderplus' respuesta anterior? –

+0

Uso el objetivo de copiar para resolver mi caso de uso @coderplus cambia el nombre –