2011-02-03 56 views
7

我在Ant文件中定義了一個POM,構建工作正常,從存儲庫中提取正確的工件,但是工件:安裝任務推送到「超級POM」,而不是POM我指定工件:安裝推送超級POM而不是POM我定義

我用下面的POM文件

<project name="my-proj" default="build" 
     xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 

    <!-- Define the Maven tasks --> 
    <path id="mvn.classpath" 
     path="${env.MAVEN_HOME}/lib/maven-ant-tasks-2.1.1.jar" /> 
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml" 
      uri="antlib:org.apache.maven.artifact.ant" 
      classpathref="mvn.classpath" /> 


    <target name="set-deps"> 
    <artifact:pom id="jar.pom" packaging="jar" 
        groupId="com.me" artifactId="my-proj" 
        version="1.0-SNAPSHOT"> 
     <dependency groupId="commons-logging" 
        artifactId="commons-logging" 
        version="1.1.1"/> 
    </artifact:pom> 

    <artifact:dependencies filesetId="project.jar.files" 
      pomRefId="jar.pom"/> 
    </target> 

    <target name="compile" depends="set-deps"> 
    <mkdir dir="${basedir}/output/casses"/> 
    <javac srcdir="${basedir}/src" 
      destdir="${basedir}/output/classes" 
      classpathref="project.jar.files" /> 
    </target> 

    <target name="build" depends="compile"> 
    <jar destfile="output/${project.name}.jar" 
     basedir="${basedir}/output/classes"/> 
    </target> 

    <target name="install" depends="build"> 
    <echo message="Installing JAR file - ${project.name}.jar"/> 
    <echo message=" groupId - ${jar.pom.groupId}"/> 
    <echo message="artifactId - ${jar.pom.artifactId}"/> 
    <echo message=" version - ${jar.pom.version}"/> 
    <artifact:install file="${basedir}/output/${project.name}.jar" 
      pomRefId="jar.pom"/> 
    </target> 
</project> 

調用ant build將建立正確的JAR文件,因此POM是由Ant腳本設置正確(在至少從依賴的角度來看)。

但是,調用ant install會導致JAR作爲超級pom版本1.0安裝在本地存儲庫中。由於版本庫中已經存在完整版本(1.0,無SNAPSHOT),所以第二次安裝失敗,只有SNAPSHOT版本可以被覆蓋。

我已經在POM上設置了groupId/artifactId/version。他們怎麼沒被拾起?我已經嘗試在安裝任務中再次設置它們(考慮到可能存在未記錄的任務屬性),但是此任務不接受這些屬性。

事實上,在安裝之前會顯示正確的值,所以POM知道它是groupId/artifactId/version,但仍然無法使用這些設置進行安裝。

順便說一句,如果有任何幫助,我使用的是2.1.1 maven-ant-tasks JAR文件,但是我安裝的Maven版本是3.0.2(不確定這些任務是否會對Maven進行外部調用Jars或者如果該功能在ant任務Jar內部)。

PS。我已經嘗試將依賴關係放在外部POM文件中,這看起來很有效,pom.xml只包含依賴關係和groupId/artifactId /版本(與上面定義的內存中的pom相同),該工件:pom更改爲:

<artifact:pom id="jar.pom" file="ant-pom.xml"/> 

沒有其他變化,但ant install現在正常工作。這是Maven-ant任務中的一個錯誤還是我缺少的東西?

我在哪裏工作,現在使用Ant,我想避免提供更多文件作爲構建過程的一部分進行管理。如果我需要我會的,但我寧願避免它!

+1

沒關係。我閱讀Maven-ant-tasks iissues日誌,它已經記錄爲一個bug(問題170 - http://jira.codehaus.org/browse/MANTTASKS-170)。 – GKelly 2011-02-04 14:07:29

回答

6

好的,代替等待此問題的解決方案,我採取瞭解決方法。我在安裝時寫出了POM,然後使用基於磁盤的POM進行安裝:

... 
<target name="install" ... 
    ... 
    <artifact:writepom pomRefId="jar.pom" file="${basedir}/output/${project.name}-pom.xml" /> 
    <artifact:pom id="disk-based.pom" file="${basedir}/output/${project.name}-pom.xml" /> 

    <artifact:install file="${basedir}/output/${project.name}.jar" 
     pomRefId="disk-based.pom"/> 
</target> 
... 

希望這會有所幫助。