2011-02-03 6 views
7

POMがAntファイルに定義されていて、ビルドが正しく機能し、リポジトリから正しいアーティファクトを取得しましたが、artifact:代わりに、私はant buildを呼び出すと、次のPOMファイルartifact:installは、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> 

が正しくJARファイルを構築していきますので、POMがで(Antスクリプトで正しく設定されている使用

を指定ポンポンの超ポンポン」少なくともビューの依存関係から)。

ただし、ant installを呼び出すと、JARがスーパー・バージョン1.0のローカル・リポジトリにインストールされます。 2回目のインストールは完全版(1.0、SNAPSHOTなし)がリポジトリにすでに存在し、SNAPSHOTバージョンのみが上書きされるため失敗します。

POMにgroupId/artifactId/versionを設定しました。どのように彼らは拾われていない来る?私はインストールタスクでこれらを再度設定しようとしましたが(タスクの文書化されていない属性があるかもしれないと思うかもしれませんが)、このタスクはこれらの属性を受け入れません。

実際には、インストール前に正しい値が表示されるため、POMはgroupId/artifactId/versionを認識しますが、これらの設定を使用したインストールは失敗します。

私は2.1.1 maven-ant-tasks JARファイルを使用していますが、私がインストールしたMavenバージョンは3.0.2です(タスクがMavenに外部呼び出しを行うかどうかはわかりませんJar、またはその機能がAntタスクJarの内部にある場合)。

PS。私は外部のPOMファイルに依存関係を置こうとしましたが、これはうまくいくようです。pom.xmlには依存関係とgroupId/artifactId/version(上記のメモリ内のpomと同じです)が含まれています。 :

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

ant installが正しく動作するようになりました。これはMaven-Ant-Taskのバグですか、それとも私が行方不明のものがありますか?

ここで私はAntを使用していますが、ビルドプロセスの一環として管理するファイルを増やしたくはありません。私がする必要がある場合は、私はむしろそれを避けるだろう!

+1

気にしないでください。私はMaven-ant-tasks iissuesログを読んでおり、すでにバグとして記録されています(issue 170 - http://jira.codehaus.org/browse/MANTTASKS-170)。 – GKelly

+0

バージョン2.1.3で同じ問題が発生しました。これが修正される予定はありませんか? – dnc253

+0

修正のための時間枠がないようです。しかし、面倒ですが、回避するのはかなり簡単な問題です(POMをディスクに書き出し、このディスクベースのPOMを使用するだけです)。 – GKelly

答えて

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> 
... 

これは役に立ちます。

関連する問題