2010-10-11 22 views
62

Maven: ¿Cómo cambiar la ruta al directorio de destino desde la línea de comandos?Maven: ¿Cómo cambiar la ruta al directorio de destino desde la línea de comando?

(Quiero usar otro directorio de destino en algunos casos)

+0

homóloga pregunta http: // stackoverflow. com/questions/1317306 3/out-of-tree-build-with-maven-is-it-possible – gavenkoa

+2

Respuesta simple: Tengo un IDE como el edificio Eclipse en 'target /', y quiero ser capaz de construir desde la línea de comando como bien sin que los dos procesos pisen los dedos del otro. –

+0

Otro caso de uso que he encontrado para esto: crear pruebas de integración como 'src/it/my-integration-test-project/pom.xml' desde la línea de comandos sin crear un directorio' target' en el árbol fuente que se copiará cuando las pruebas de integración se ejecuten como parte de la fase de verificación del proyecto que lo contiene. –

Respuesta

65

Debe utilizar perfiles.

<profiles> 
    <profile> 
     <id>otherOutputDir</id> 
     <build> 
      <directory>yourDirectory</directory> 
     </build> 
    </profile> 
</profiles> 

Y empezar experto con su perfil

mvn compile -PotherOutputDir 

Si realmente desea definir su directorio desde la línea de comandos que podría hacer algo como esto (NO se recomienda en absoluto):

<properties> 
    <buildDirectory>${project.basedir}/target</buildDirectory> 
</properties> 

<build> 
    <directory>${buildDirectory}</directory> 
</build> 

Y compile de esta manera:

mvn compile -DbuildDirectory=test 

Eso es porque no se puede cambiar el directorio de destino mediante -Dproject.build.directory

+0

Muchas gracias. ¿Por qué no se recomienda la segunda solución? –

+1

@iimuhin, la primera solución es el uso correcto de las posibilidades dadas por la configuración de maven, la segunda es más un truco para que funcione. Si las opciones '-Dproject.build.directory' estaban destinadas a ser utilizadas, serían utilizables; y esta es una solución para el problema '-Dproject.build.directory'. Además, con la primera solución, usted especifica las rutas de una vez por todas, no puede hacer un error tipográfico en el nombre del directorio cuando inicia la línea de comando, puede usar esta solución fácilmente incluso si trabaja desde un IDE, etc. –

+5

El problema con la solución de perfiles es que muchos de los casos de uso para cambiar el directorio de destino son específicos del usuario (como querer construir en un disco RAM) y no pertenecen al pom.Los perfiles en el archivo settings.xml específico del usuario no pueden contener un elemento de compilación, por lo que no es una opción. – EricS

23

Colin es correcto que un perfil se debe utilizar. Sin embargo, su respuesta codifica el directorio de destino en el perfil. Una solución alternativa sería añadir un perfil de la siguiente manera:

<profile> 
     <id>alternateBuildDir</id> 
     <activation> 
      <property> 
       <name>alt.build.dir</name> 
      </property> 
     </activation> 
     <build> 
      <directory>${alt.build.dir}</directory> 
     </build> 
    </profile> 

Si lo hace, tendría el efecto de cambiar el directorio de construcción a lo que viene dada por la propiedad alt.build.dir, que se puede dar en un POM , en la configuración del usuario o en la línea de comando. Si la propiedad no está presente, la compilación se realizará en el directorio de destino normal.

+0

Disculpe la pregunta n00b, pero ¿cuál es la forma apropiada de establecer la propiedad en el archivo de configuración del usuario para que esto sea ventajoso? ? Entiendo por [Configuración de referencia] (http://maven.apache.org/settings.html) que las propiedades establecidas en el archivo de configuración no se interpolarán en el archivo de configuración. –

+0

Además, ¿qué ventaja tendría esta oferta? Probablemente me esté perdiendo algo, pero suponiendo que los 'casos' del OP se especifiquen en la línea de comando, ¿no sería esto justo que el parámetro '-Dalt.build.dir = ~/mytarget' sea equivalente a usar' -D' para algunos otra propiedad? –

+0

Ah, me acabo de dar cuenta de que todos aquí están hablando de agregar perfiles al POM, y no a settings.xml. Eso haría mis preguntas al menos tan m00t como n00b. Lo siento por eso. –

5

Mi solución:

  • en pom.xml:

    comando
    <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-jar-plugin</artifactId> 
         <version>2.3.2</version> 
         <configuration> 
          <outputDirectory>${dir}</outputDirectory> 
         </configuration> 
        </plugin> 
    
  • en bash:

    mvn package -Ddir="/home/myuser/"

+2

Esto no cambia el directorio de destino (project.build.directory). Simplemente cambia el direcory de salida para un solo complemento. – fnt

Cuestiones relacionadas