7

Antファイルで定義されたPOMがあり、ビルドは正しく機能し、リポジトリから正しいアーティファクトをプルしますが、artifact:installタスクは指定したpomではなく「super-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がsuper-pomバージョン1.0としてローカルリポジトリにインストールされます。フルバージョン(1.0、SNAPSHOTなし)がリポジトリにすでに存在し、SNAPSHOTバージョンのみを上書きできるため、2回目のインストールは失敗します。

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 / version(上記で定義したメモリ内pomと同じ)のみが含まれ、artifact:pomは次のように変更されます。

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

他に何も変更はありませんが、ant install正しく動作するようになりました。これはMaven-ant-tasksのバグですか、それとも私が見逃しているものがありますか?

私が現在作業している場所ではAntを使用しており、ビルドプロセスの一部として管理するファイルを増やすことは避けたいと考えています。必要な場合はそうしますが、避けたいです!

4

1 に答える 1

6

OK、この問題の修正を待つ代わりに、回避策を実行しました。インストールで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>
...

お役に立てれば。

于 2011-11-08T11:04:24.640 に答える