2010-10-20 7 views
7

Ich habe gerade ein Ameisenprojekt in maven übersetzt, aber da Maven sich nicht wirklich mit dem Deployment beschäftigt, stelle ich ein paar antrun in den Build. Aber wenn ich versuche, es auszuführen, überspringt das Plugin meine Aufgaben. zum Beispiel wenn ich mvn clean ansteuere: run bekomme ich die folgende Nachricht: Kein ant Ziel definiert - SKIPPED. Das Gleiche passiert mit der zweiten Phase, in der ich versuche, die Bereitstellungsphase außer Kraft zu setzen, um eine tatsächliche Bereitstellung durchzuführen, anstatt sie in ein Repository hochzuladen.Wie man maven antrun plugin an die saubere Phase bindet

Hier finden Sie einen Auszug aus meiner pom.xml (Typ: pom):

  <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.6</version> 
      <executions> 
       <execution> 
        <id>clean</id> 
        <configuration> 
         <task> 
          <echo>Cleaning deployed website</echo> 
         </task> 
         <tasks> 
          <delete dir="${deployRoot}/mydir/${env}"/> 
         </tasks> 
        </configuration> 
        <phase>clean</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>deployment</id> 
        <configuration> 
         <task> 
          <echo>Deploying website</echo> 
         </task> 
         <tasks> 
          <echo>Copying website artifact to deployment </echo> 
          <mkdir dir="${deployRoot}/mydir/${env}" /> 
          <unzip 
           src="${project.basedir}/target/${env}.${project.version}.zip" 
           dest="${deployRoot}/mydir/${env}" /> 
          <chmod perm="ugo+rx"> 
           <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin"> 
            <include name="**/*.sh" /> 
            <include name="**/*.bat" /> 
           </fileset> 
          </chmod> 
         </tasks> 
        </configuration> 
        <phase>deploy</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Antwort

11

In Ihrem pom.xml definieren Sie zwei Arten von Hinrichtungen:

  • One mit dem clean verbunden ist Phase
  • Eine ist mit der deploy Phase verbunden. Beachten Sie, durch die Art und Weise, dass für Maven, deploy tut nicht bedeuten auf einem Server meine (Web-) Anwendung bereitstellen aber das Artefakt auf einem Remote-Repository bereitstellen. Bitte lesen Sie die deploy plugin information für weitere Details.

Also, wenn Sie den Befehl ausführen mvn bereitstellen, wenn der Maven Lebenszyklus der deploy Phase erreicht, wird es das Plugin Ausführung (die zweite in Ihrem pom.xml) laufen.

jedoch in Ihrem Fall sind Sie nicht den Standard-Maven-Lebenszyklus ausgeführt wird, wie Ihr Befehl ist MVN antrun: run (Ich erwäge nicht clean Ziel ist hier, da es nicht für das Problem keine Rolle). Dies kann in Maven zu übersetzt werden, führen Sie das Antrun-Plugin, mit dem Ziel laufen. Das Problem dabei ist, dass Sie keine Konfiguration (die die Ant-Tasks enthält) für einen direkten Aufruf Ihres Ant-Plugins definieren.

So zwei Lösungen:

  • Bind die zweite Ausführung an die install Phase, und führen Sie dann die mvn clean install statt mvn antrun:run. Beachten Sie, dass Sie in diesem Fall den gesamten Maven-Lebenszyklus (d. H. Kompilierung, Tests, Verpackung) ausführen.
  • Erstellen Sie eine Konfiguration dieses Plugins, die nicht im Zusammenhang mit einer beliebigen Ausführung ist. In XML-Sicht einfach hinzufügen (oder verschieben) den zweiten <configuration>-Block, um ein Kind der <plugin>-Definition zu sein.

Wenn Sie die zweite Lösung wählen, werden Sie diese ein pom.xml wie man haben:

 <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.6</version> 
     <!-- For cleaning --> 
     <executions> 
      <execution> 
       <id>clean</id> 
       <configuration> 
        <task> 
         <echo>Cleaning deployed website</echo> 
        </task> 
        <tasks> 
         <delete dir="${deployRoot}/mydir/${env}"/> 
        </tasks> 
       </configuration> 
       <phase>clean</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <tasks> 
       <echo>Copying website artifact to deployment </echo> 
       ... 
      </tasks> 
     </configuration> 
    </plugin> 
Verwandte Themen