2016-04-25 10 views
0

Wir haben ein Profil, das maven-antrun-plugin verwendet, um eine heruntergeladene JAR auszuführen.Wie kann man im maven-antrun-plugin eine Abhängigkeit vom Abhängigkeitsbereich des Plugins verwenden?

Exhibit A: (funktioniert)

Wir können die heruntergeladene JAR-Referenz die Eigenschaft mit ${maven.dependency.com.foobar.target-jar.jar.path} (Can I use the path to a Maven dependency as a property?). In dieser Lösung sind die benutzerdefinierten Abhängigkeits- und Repository-Informationen jedoch nicht auf den Umfang des Profils beschränkt.

<project> 
    ... 
    <repositories> 
     <repository> 
      <id>thirdparty</id> 
      <name>Third Party</name> 
      <url> 
       [URL for the repository that holds the target JAR] 
      </url> 
      <layout>default</layout> 
     </repository> 
    </repositories> 
    ... 
    <dependencies> 
     <dependency> 
      <groupId>com.foobar</groupId> 
      <artifactId>target-jar</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
    </dependencies> 
    ... 
    <profiles> 
     <profile> 
      <id>runJARprofile</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.8</version> 
         <inherited>false</inherited> 
         <executions> 
          <execution> 
           <id>run-jar</id> 
           <phase>package</phase> 
           <configuration> 
            <target name="runJar" fork="true"> 
             <java jar="${maven.dependency.com.foobar.target-jar.jar.path}" /> 
            </target> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
... 
</project> 

Exhibit B: (habe es nicht bekommen arbeiten)

Hier zogen wir die Abhängigkeit und Repository-Informationen in das Profil. Maven lädt das Artefakt erfolgreich herunter, aber wir wissen nicht mehr, wie man es nach Eigenschaften referenziert.

<project> 
    ... 

    <profiles> 
     <profile> 
      <pluginRepositories> 
       <repository> 
        <id>thirdparty</id> 
        <name>Third Party</name> 
        <url> 
         [URL for the repository that holds the target JAR] 
        </url> 
        <layout>default</layout> 
       </repository> 
      </pluginRepositories> 
      ... 
      <id>runJARprofile</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.8</version> 
         <inherited>false</inherited> 
         <dependencies> 
          <dependency> 
           <groupId>com.foobar</groupId> 
           <artifactId>target-jar</artifactId> 
           <version>1.0.0</version> 
          </dependency> 
         </dependencies> 
         <executions> 
          <execution> 
           <id>run-jar</id> 
           <phase>package</phase> 
           <configuration> 
            <target name="runJar" fork="true"> 
             <java jar="${?????}" /> 
            </target> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
... 
</project> 
+0

Ich bin mir nicht sicher, ob ich das Problem/Frage verstehen. Wo ist die Eigenschaft 'maven.dependency.com.foobar.target-jar.jar.path' definiert? – Tunaki

+1

@Tunaki Sieht aus wie das erste Beispiel, das es aus 'pom's' 'mit dem' $ {maven.dependency.com.foobar.target-jar.jar.path} 'gezogen hat, wenn das zweite Beispiel es will Verwenden Sie eine '', die der '' hinzugefügt wird. Ich denke, die Frage ist "Wie können Sie eine Abhängigkeit vom Abhängigkeitsbereich des Plugins im _maven-antrun-plugin_ verwenden?". – mkobit

+0

Basiert auf [diesem Link] (http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html), das Eigenschaftsformat '$ {maven.dependency.com.foobar.target-jar .jar.path} ist veraltet, daher sollten wir stattdessen '$ {com.foobar: target-jar: jar}' verwenden. Versuchte das in Exhibit A und es funktioniert, aber immer noch nicht in Exhibit B. – thn929

Antwort

0

I crated ein POM ähnlich wie Ihre Exhibit B hier und bekam die folgende Meldung während eines mvn package -P runJARprofile:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run 
(run-jar) on project so-36848518: An Ant BuildException has occured: 
Cannot execute a jar in non-forked mode. Please set fork='true'. 
[ERROR] around Ant part ...<java jar="${my:test:jar}"/>... 

ich die entsprechende Zeile geändert:

<java jar="${my:test:jar} fork="true"/> 

und:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
+0

Ja, ich habe das 'fork =" true "' Set in unserem realen Projekt. Ich habe versucht, die Beispiele zu entwirren und zu verallgemeinern ... ich hätte sie nicht entfernen sollen, ohne sie weiter zu verstehen. Ich werde den ursprünglichen Beitrag aktualisieren. Vielen Dank! – thn929