2012-10-01 7 views
8

Bei der Bereitstellung einer Webapp muss ich einige Variablen in UI-Ressourcen aktualisieren, einige Assets entpacken und einige Dateien concattieren, derzeit wird dies über eine Ant-Task erreicht. Ich versuche, diese Aufgabe in der Maven-Build-Prozess laufen so etwas wie dies mit ...Führen Sie eine Ameisen-Aufgabe in der Maven-Build-Phase aus, bevor der Krieg verpackt wird?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>prepare-package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

die oben schlägt fehl, da die Dateien noch nicht in das Zielverzeichnis kopiert. Wenn ich die Phase auf "packen" stelle, läuft die Ameisen-Aufgabe gut und alle Dateien werden erstellt/geändert, aber es ist keine Hilfe, da die .war bereits erstellt wurde, bevor das Ameisen-Ziel ausgeführt wird.

Grundsätzlich muss ich mein Ameisen-Ziel gegen Ende der Vorbereitung-Paket-Phase laufen.

Nachdem ich die Lifecycle Reference geschaut habe, kann ich nicht trainieren, wie man die granulareren Ziele dem antrun plugin aussetzt.

Irgendwelche Ideen?

+0

Haben Sie darüber nachgedacht, diese Ameisen-Aufgaben mit "reinen" Maven-Plugins zu erledigen? – maba

Antwort

17

Da ich keine Antwort auf meinen Kommentar erhalten habe, denke ich, dass Sie mit maven-antrun-plugin bleiben wollen.

Aus dem, was ich gelernt und erfahren habe, wenn zwei Plugins in derselben Phase ausgeführt werden sollen, werden sie in der Reihenfolge ausgeführt, in der sie in pom.xml deklariert sind.

Damit dies funktioniert, müssen Sie die maven-war-plugin in der <plugins/> Liste nach der maven-antrun-plugin hinzufügen.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <!-- First step is to disable the default-war build step. --> 
      <id>default-war</id> 
      <phase>none</phase> 
     </execution> 
     <execution> 
      <!-- Second step is to create an exploded war. Done in prepare-package --> 
      <id>war-exploded</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exploded</goal> 
      </goals> 
     </execution> 
     <execution> 
      <!-- Last step is to make sure that the war is built in the package phase --> 
      <id>custom-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

hinzugefügt einige weitere Ausführungen, so dass die default-war deaktiviert erste ist, dann wird der Krieg zur Explosion gebracht wird und schließlich wird der Krieg verpackt.

+3

das war eine sehr hilfreiche Antwort für mein Problem. Allerdings hatte ich ein etwas anderes Setup: explodierte (prepare-package) -> copy-resources (prepare-package) -> war (package). Um nicht zu überschreiben, was die exploding-Aufgabe "war:" erzeugte, musste ich "" auf ein leeres Verzeichnis für den Krieg: Krieg ausführen. – omilke

1

Wie Sie festgestellt haben, ist dies ein Bereich, in dem der Lebenszyklus nicht die erforderliche Granularität bietet. Ich beantwortete eine similar question für jemanden früher. Es ist keine exakte Antwort auf Ihre Frage, aber die Technik kann zutreffen.