Артефакт: установка выдвигает супер-помпу вместо POM, который я определяю - PullRequest
7 голосов
/ 03 февраля 2011

У меня есть POM, определенный в файле Ant, сборка работает правильно, вытаскивая правильные артефакты из репозитория, однако, артефакт: установка задач переводит в '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-файл, поэтому POM-файл корректно настраивается с помощью сценария Ant (по крайней мере, с точки зрения зависимости).

Тем не менее, вызов ant install приводит к установке JAR в локальном хранилище как версия super-pom 1.0. установка во второй раз завершается неудачно, так как в хранилище уже существует полная версия (1.0, SNAPSHOT отсутствует), и только версии SNAPSHOT могут быть перезаписаны.

Я установил groupId / artifactId / version в POM. Почему они не подобраны? Я попытался установить их снова в задаче установки (подумав, что для этой задачи были недокументированные атрибуты), но эта задача не принимает эти атрибуты.

Фактически, правильные значения будут отображаться перед установкой, поэтому POM знает, что это groupId / artifactId / version, но все равно не удается выполнить установку с этими настройками.

Кстати, если это поможет, я использую файл JAR 2.1.1 maven-ant-tasks, но я установил версию 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 Ответ

6 голосов
/ 08 ноября 2011

ОК, вместо того, чтобы ждать исправления для этой проблемы, я пошел с обходным путем. Я записываю 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>
...

Надеюсь, это поможет.

...