Использование задачи Ant Maven для установки jar в локальный репозиторий - PullRequest
6 голосов
/ 11 января 2011

В конце моего идентификатора сборки муравья, как это, чтобы вызвать эквивалент вызова командной строки

mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true

, чтобы он добавлял недавно созданный jar-файл в репозиторий maven, на который будет опираться другой проект.

Я попытался использовать maven-ant-task и добавил кувшин maven-ant-task в проект ant build, а в build.xml следующий код:

<target name ="minstall" depends="jar">
  <artifact:pom id="maven_install" file="maven_install.xml" />
  <artifact:install file="${out.dir}/my_project.jar">
      <pom refid="maven_install"/>
  </artifact:install> 
</target>

но, похоже, чего-то не хватает, так как это не будет работать для меня. Для начала я получаю сообщение об ошибке в build.xml (файл сборки ant), говорящее

Префикс "артефакт" для элемента "артефакт: pom" не связан.

Что я делаю не так. Я новичок в муравьях?

По вопросу о назначении, каково назначение связанного файла POM? У меня обычно не было бы POM в этом проекте, так как это сборка муравья

Ответы [ 4 ]

3 голосов
/ 03 февраля 2011

Как упоминалось ранее, вам нужно убедиться, что задачи определены в вашем скрипте ant, и что пространство имен артефакта понятно.

Файл POM используется (в данном случае), чтобы сообщить репозиториям Maven зависимости JAR, который вы помещаете в репозиторий. POM также должен указывать идентификационную информацию JAR (groupId, artifactId, номер версии, лицензия и т. Д.).

Строго говоря, вам не нужен внешний POM, вы можете определить информацию в файле build.xml следующим образом:

<!-- Assuming tasks defined, and 'artifact' namespace exists -->
<artifact:pom id="maven_install" groupId="com.whatever" artifactId="some-jar"
              version="1.0" packaging="jar">
    <dependency groupId="..." artifactId="..." version="..."/>
    <dependency groupId="..." artifactId="..." version="..."/>
    <license name="apache" url="http://www.apache.org"/> <!-- can be omitted -->
</artifact:pom>

<target name ="minstall" depends="jar">
    <artifact:install file="${out.dir}/my_project.jar" pomRefId="maven_install"/>
</target>

Когда вы устанавливаете JAR в задаче 'minstall', POM должен генерироваться с соответствующими зависимостями в локальном репозитории.

3 голосов
/ 11 января 2011

Возможно, maven-ant-task банка не установлена ​​ , т.е. не в вашем муравье CLASSPATH.Вы можете следовать этой инструкции для этого.

1 голос
/ 11 января 2011

Это сообщение означает, что в вашем build.xml отсутствует атрибут xmlns: artifact.Посмотрите на страницу установки в документации для примера.

Что касается цели файла POM, это в основном метаданные, чтобы maven мог правильно определить зависимости.В реальной сборке Maven он также описывает, как собирать, тестировать и упаковывать.Но в вашем случае все это делает муравей вместо этого.

0 голосов
/ 11 января 2011

Я думаю, что нет смысла помещать такие команды в build.xml Ant.Если вы хотите, чтобы ваш jar-файл был установлен в репозитории Maven, просто используйте команду mvn install.

Кроме того, я полагаю, что вы каким-то образом путаете назначение инструментов Maven и Ant в своем проекте.Я бы предложил использовать Maven в качестве основного инструмента сборки.Вы можете настроить вызов целей Ant в вашем файле POM, если вам это действительно нужно.Лично я думаю, что это лучшее решение, чтобы Ant вызвал Maven.Цели Maven (такие как clean, test, package, install и т. Д.) Очень просты в использовании и эффективны (я думаю, вы можете прочитать их в каждом учебном пособии по Maven).

...