2013-01-02 10 views
7

Please help me I am new to Maven. Sto cercando di generare una cartella di destinazione in una directory diversa dalla cartella del progetto Maven. Secondo i miei requisiti, il file war generato dovrebbe essere collocato in un'altra cartella come C: \ naresh quando costruisco il mio progetto maven.Configurazione di Maven per generare output all'esterno della directory di progetto

Ecco il mio codice:

<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"> 
    <packaging>war</packaging> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>project</artifactId> 
    <version>1.0</version> 

    <build> 
    <directory>${project.basedir}/target</directory> 
    <outputDirectory>C:\Software\${project.basedir}/target</outputDirectory> 

    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 

    </build> 
</project> 
+1

La domanda è: perché avete bisogno di avere il layout diverso? – khmarbaise

+0

@khmarbaise, a volte abbiamo fatto questo tipo di accordi per accelerare lo sviluppo e test sul locale. Ma queste configurazioni non sono realmente pubblicate su PROD o UAT Environments, ovviamente. – Jaikrat

+0

Questo tipo di configurazione non migliorerà le prestazioni. Esattamente la causa opposta che questo fallirà su ogni solutoin CI ecc. – khmarbaise

risposta

10

@khmarbaise è corretto, con Maven è meglio seguire le convenzioni laddove possibile, altrimenti si dovrebbe usare un diverso strumento di costruzione o si finisce per combatterlo per intero. Detto questo, è possibile effettuare le seguenti operazioni per raggiungere il tuo obiettivo:

<build> 
    <outputDirectory>${user.home}/${project.artifactId}/target</outputDirectory> 
    ... 
</build> 

Questo utilizza la proprietà di sistema user.home come directory principale, e crea la directory di output in una cartella denominata dopo il <artifactId/> ('Progetto'). Tutto il sistema Java properties è disponibile nel pom. Se hai bisogno che questo venga creato altrove, puoi semplicemente renderlo relativo alla directory sopra.

Uso Maven-guerra-plugin invece:

Dal momento che la tua domanda indica che è in realtà solo bisogno l'uscita manufatto (file di guerra) in una directory diversa, vi suggerisco di modificare la configurazione per il output directory in il plug-in maven-war. Per esempio:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.0</version> 
     <configuration> 
      <outputDirectory>${user.home}/${project.artifactId}</outputDirectory> 
     </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

Grazie, signore, proverò in questo modo .. – Naresh

0

molto simile con la risposta accettata, sto usando una cartella implementazioni che è montato in una finestra mobile

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <outputDirectory>${project.build.directory}/deployments</outputDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
Problemi correlati