Существуют ли плагины ant, которые обертывают maven, чтобы я мог использовать его функции управления зависимостями, чтобы загружать для меня jar-файлы и помещать их в папку lib моей сборки ant?
Моя конкретная проблема заключается в том, что я использую плагин Crap4j для Hudson, но пока он не поддерживает Maven. Поскольку это небольшой проект, maven - это излишество, но я не хочу обходиться без mvn dependency:copy-dependcies, если мне это не нужно.
Какие-либо предложения? (кроме того, чтобы сосать это)
Если вы считаете, что Maven является излишним в вашем проекте, вы можете/должны попробовать Apache Ivy: это очень мощная библиотека управления зависимостями, похожая на Maven.
Если вы размещаете проект в Интернете, взгляните также на Ivy Roundup, это хранилище определений Ivy для различных библиотек.
Ответ 2 · рейтинг 13 · Tim O'Brien
Существует новый набор задач Ant, использующих Mercury. Mercury - это рефакторинг кода, который станет основой взаимодействия Maven 3 с репозиториями Maven (и OSGi), реализуемого Олегом Гусаковым. Mercury хорошо протестирован, и вы можете начать использовать его в проектах Ant уже сегодня. Взгляните на некоторые из практических документов, которые написал Олег:
Вот простой пример использования Mercury в файле Ant build.xml. Следующий файл сборки создает путь к классам, который зависит от версии 3.0 артефакта asm:
Существует множество дополнительных функций, таких как поддержка проверки подписей PGP или дайджестов MD5. Вы также можете начать определять различные репозитории, от которых зависит Mercury. Этот XML позволяет определить ссылку на репозиторий, такой как Nexus, в дополнение к использованию локального каталога в качестве репозитория:
Наиболее привлекательной является возможность публикации артефакта в репозитории из файла сборки Ant. Если вы работаете в организации любого масштаба, вам следует задуматься о развертывании артефактов в менеджере репозитория, таком как Nexus. С Mercury вы можете начать развертывание артефактов в менеджере репозитория без необходимости использования Maven. Вот файл сборки, который определяет аутентифицированный репозиторий и записывает артефакт:
Меркурий готов к использованию, и вы можете ожидать от Олега много разработок в будущем. Если вы хотите начать его использовать, лучше всего посмотреть на Страница Олега с практическими рекомендациями. (Примечание: эта информация скоро будет включена в Полное руководство)
Ответ 3 · рейтинг 11 · Dominic Mitchell
Хотя ртутные задачи работают, я их не использовал. У меня был хороший успех с их предшественниками, maven-ant-tasks. Их довольно просто запустить, если у вас уже есть под рукой POM.
<project name="blah" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- If you drop the maven-ant-tasks in ~/.ant/lib, you don't need these two bits. -->
<taskdef uri="antlib:org.apache.maven.artifact.ant"
resource="org/apache/maven/artifact/ant/antlib.xml"
classpathref="ant.classpath" />
<path id="ant.classpath">
<fileset dir="${ant.tasks.dir}">
<include name="*.jar" />
</fileset>
</path>
<target name="resolve" description="--> retrieve dependencies with maven">
<!-- Resolve dependencies -->
<artifact:dependencies filesetId="dependency.fileset">
<pom file="pom.xml" />
</artifact:dependencies>
<!-- Copy all dependencies to the correct location. -->
<copy todir="${web.dir}/WEB-INF/lib">
<fileset refid="dependency.fileset" />
<!-- This mapper strips off all leading directory information -->
<mapper type="flatten" />
</copy>
</target>
</project>
Мне нравится хранить свои банки задач ant внутри проекта, поэтому я добавил taskdef и path. Но если вы хотите поместить maven-ant-tasks-2.0.9.jar в ~/.ant/lib, вам не нужно объявлять этот материал. Я думаю.
<target name="getDependencies">
<path id="maven-ant-tasks.classpath" path="${basedir}${file.separator}maven${file.separator}lib${file.separator}maven-ant-tasks.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />
<artifact:dependencies filesetId="dependency.fileset" type="jar">
<pom file="pom.xml" />
</artifact:dependencies>
<!--TODO take care of existing duplicates in the case of changed/upgraded dependencies-->
<copy todir="lib">
<fileset refid="dependency.fileset" />
<mapper type="flatten" from="${dependency.versions}" />
</copy>
</target>
Ответ 9 · Johannes
Я работаю над той же проблемой прямо сейчас. Я установил все необходимые библиотеки в свой локальный репозиторий Maven, а оттуда поместил их в репозиторий Maven компании. Он еще не совсем правильно работает. Некоторые из тестов терпят неудачу, что хорошо работает в моем тестовом прогоне Maven, но, поскольку результат теста не важен для данных о покрытии, я вполне удовлетворен.