artifact:install推送super-pom而不是我定义的POM

时间:2011-02-03 13:58:15

标签: maven-3 maven-ant-tasks

我在Ant文件中定义了一个POM,构建工作正常,从存储库中提取正确的工件,但是,工件:安装任务推送到'super-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文件,因此Ant脚本正在正确设置POM(至少从依赖关系的角度来看)。

但是,调用ant install会导致JAR作为super-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进行外部调用或者如果功能是蚂蚁任务Jar内部的。)

PS。我已经尝试将依赖项放在外部POM文件中,这似乎有效,pom.xml只包含依赖项和groupId / artifactId / version(与上面定义的内存中的pom相同),工件:pom更改为:

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

没有其他任何更改,但ant install现在可以正常工作。这是maven-ant-tasks中的一个错误还是我缺少的东西?

我现在正在使用Ant,我希望避免在构建过程中提供更多要管理的文件。如果我需要,但我宁愿避免它!

1 个答案:

答案 0 :(得分: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>
...

希望这有帮助。