2016-05-07 12 views
1

Ich habe ein Problem passieren (version) auf einen von Maven ausgeführt Skript mit den maven-antrun-plugin.kann nicht Maven-Eigenschaft auf ant run-Plugin vorbei Eigenschaft einer benutzerdefinierten Maven

ich schon Maven antrun: pass maven properties to ant gelesen habe, aber diese lösten nicht die Problem.

Es gibt einen Unterschied zwischen meinem Problem und dem in der erwähnten SO-Frage.

In meinem Fall wird die maven-antrun-plugin als Kind eines übergeordneten Projekts ausgeführt, wobei die Eigenschaft als globale Eigenschaft für alle Module definiert ist.

Das maven-antrun-plugin ist ein Modul des Projekts.

Elternteil pom Schnipsel sieht wie folgt aus:

<project ...> 
    <!-- Parent --> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>xxx</groupId> 
    <artifactId>xxx</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
    <my.project.version>0.0.3-SNAPSHOT</my.project.version> 
    <maven.compiler.source>1.7</maven.compiler.source> 
    <maven.compiler.target>1.7</maven.compiler.target> 
    <java.version>1.7</java.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

Ameise laufen pom wie folgt aussieht. Das Anwesen ist target.version

namens
<project> 
     <!-- Module --> 
<parent> 
    <groupId>xxx</groupId> 
    <artifactId>xxx</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 

<build> 
    <plugins> 
     <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
        <id>ant-magic</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <tasks> 
         <property name="compile_classpath" 
            refid="maven.compile.classpath"/> 
         <property name="outputDir" 
            value="${project.build.outputDirectory}"/> 
         <property name="sourceDir" 
            value="${project.build.sourceDirectory}"/> 
         <property name="compile_classpath" refid="maven.compile.classpath"/> 

         <property name="target-version" refid="${my.project.version}"/> 
         <echo message="Passed target version to ant build script: ${target-version}"/>  

         <ant antfile="${basedir}/src/main/ant/create-dist.xml" 
          target="deploy-ea"/> 
         </tasks> 
        </configuration> 
        </execution> 
       </executions> 
       </plugin> 
     </plugins> 
</build> 
</project> 

Die folgende Maven Build-Fehler während der Ausfürung des Build des Kindes Modul auftritt, die die antrun-Maven-Plugin enthält.

`An Ant BuildException has occured: Reference 0.0.3-SNAPSHOT` not found 

das ist interessant, weil dies der Wert der Maven-Eigenschaft ist.

Ich habe auch versucht, nur für die

<property name="target-version" refid="my.project.version"/> 

Welche den folgenden Fehler führt In meinem Fall

refid attribute 

die einfachen Eigenschaftsnamen als Argument zu verwenden:

An Ant BuildException has occured: Reference my.project.version not found 

Der Amt-Skript verwendet die Eigenschaft wie folgt

Habe ich einen Fehler in meiner Konfiguration oder ist das Problem, dass die Eigenschaft innerhalb der Eltern Pom definiert ist. Und daher vielleicht ein Maven-Lebenszyklusproblem?

+0

zuerst Ihr pom Schnipsel sieht nicht, wie es von einem Elternteil erbt, was der Fall ist, wenn Sie innerhalb des Moduls eines größeren Multi-Modul zu bauen sind ... Außerdem ist die Frage, warum sind Sie mit Maven-antrun- Plugin? – khmarbaise

+0

@khmarbaise Erstens, weil ich nur die relevanten Teile des Problems zeigen wollte, in diesem Fall die Pom-Schnipsel. Zweitens benutze ich das ant-Plugin, weil ich natives C++, JNI, Zeug erstellen muss und auf diese Weise scheint es für mich der pragmatischste Weg zu sein. Vielleicht können Sie mir eine gute Lösung bieten, um ein C++ - Projekt zu erstellen, in dem der Java-Client seine Funktionalität nutzt. – Diversity

+0

Ich kann empfehlen, einen Blick auf https://github.com/maven-nar/nar-maven-plugin zu werfen ... – khmarbaise

Antwort

1

Ich habe den falschen Namen refid für die property -Tag verwendet. Das Ändern des Attributs auf value löste das Problem. Zusätzlich habe ich das tasks Tag zu target ersetzt, weil es als veraltet markiert ist. Dies hatte jedoch keinen Einfluss auf das gegebene Problem.

<project> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>ant-magic</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <tasks> 
           <property name="compile_classpath" 
              refid="maven.compile.classpath"/> 
           <property name="outputDir" 
              value="${project.build.outputDirectory}"/> 
           <property name="sourceDir" 
              value="${project.build.sourceDirectory}"/> 
           <property name="compile_classpath" refid="maven.compile.classpath"/> 

           <property name="target-version" value="${my.project.version}"/> <!-- PROBLEM refid should be value--> 
           <echo message="Passed target version to ant build script: ${target-version}"/>  

           <ant antfile="${basedir}/src/main/ant/create-dist.xml" 
            target="deploy-ea"/> 
          </tasks> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project>