2013-01-02 10 views
7

Bitte helfen Sie mir Ich bin neu in Maven. Ich versuche, einen Zielordner in einem anderen Verzeichnis aus dem Maven-Projektordner zu generieren. Nach meinen Anforderungen sollte die generierte WAR-Datei in einem anderen Ordner wie C: \ naresh abgelegt werden, wenn ich mein Maven-Projekt erstelle.Konfigurieren von Maven zum Generieren von Ausgaben außerhalb des Projektverzeichnisses

Hier mein Code:

<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

Die Frage ist, warum brauchen Sie das andere Layout zu haben? – khmarbaise

+0

@khmarbaise, Manchmal haben wir diese Art von Vereinbarungen getroffen, um die Entwicklung und das Testen auf lokaler Ebene zu beschleunigen. Aber diese Konfigurationen werden natürlich nicht wirklich in PROD oder UAT Environments gepostet. – Jaikrat

+0

Diese Art der Konfiguration verbessert die Leistung nicht. Genau das Gegenteil, das wird auf jedem CI solutoin usw. fehlschlagen. – khmarbaise

Antwort

10

@khmarbaise ist korrekt, mit Maven sind Sie besser dran, die Konventionen wo möglich zu befolgen - andernfalls sollten Sie ein anderes Build-Tool verwenden oder am Ende kämpfen Sie den ganzen Weg. Das heißt, können Sie die folgenden Funktionen Ihr Ziel zu erreichen tun:

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

Dies verwendet die user.home Systemeigenschaft als Stammverzeichnis und erstellt das Ausgabeverzeichnis in einem Ordner mit dem Namen nach dem <artifactId/> (‚Projekt‘). Alle Java-System properties sind in der Pom verfügbar. Wenn Sie das an anderer Stelle erstellen müssen, können Sie es relativ zum obigen Verzeichnis machen.

Mit Maven-Krieg-Plugin statt:

Da Ihre Frage zeigt an, dass Sie wirklich brauchen nur das Artefakt (WAR-Datei) Ausgabe in einem anderen Verzeichnis, schlage ich vor, dass Sie die Konfiguration für den output directory ändern in das maven-war-plugin. Zum Beispiel:

<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

Danke Sir, ich werde es auf diese Weise versuchen .. – Naresh

0

Sehr ähnlich mit der akzeptierten Antwort, ich bin einen Ordner Einrichtungen verwendet, die in einem Docker montiert ist

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