Разрешение файлов javadoc с помощью Ant и Ivy
Я бы хотел, чтобы Айви достал и log4j.jar, и JavaDocs. Прямо сейчас я в тупике. Когда я использую это в моем ivy.xml...
<dependency org="log4j" name="log4j" rev="1.2.16"/>
... тогда я просто получаю файл.jar. Но при использовании этого ivysettings.xml...
<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
<settings
defaultResolver="default"
defaultConflictManager="all" />
<resolvers>
<url name="default" m2compatible="true">
<artifact pattern="http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
<artifact pattern="http://repo2.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
</url>
</resolvers>
</ivysettings>
... и этот ivy.xml...
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="foo" module="bar"/>
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16">
<artifact name="log4j" type="jar" ext="jar"/>
<artifact name="log4j" type="javadoc" ext="jar"/>
</dependency>
</dependencies>
</ivy-module>
... тогда я получаю это сообщение об ошибке: java.lang.RuntimeException: несколько артефактов модуля log4j#log4j;1.2.16 извлекаются в один и тот же файл! Обновите шаблон извлечения, чтобы исправить эту ошибку.
Что мне здесь не хватает? Как я могу заставить Ivy разрешать файлы JavaDoc и.jar?
редактировать: Спасибо за все быстрые и подробные ответы до сих пор. Это мой обновленный ivy.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation=
"http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="foo" module="bar"/>
<configurations>
<conf name="default" visibility="public"/>
<conf name="compile" visibility="public"/>
<conf name="master" visibility="public"/>
<conf name="javadoc" visibility="public"/>
</configurations>
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16" conf="default->master,javadoc"/>
<dependency org="javax.servlet" name="servlet-api" rev="2.5" />
<dependency org="com.someother" name="proprietary-core" rev="1.2.3" force="true"/>
<dependency org="com.someother" name="proprietary" rev="1.2.3" force="true"/>
<dependency org="com.someother" name="scanner" rev="1.0" force="true"/>
</dependencies>
</ivy-module>
Теперь я получаю это сообщение об ошибке:
Buildfile: D:\workspace\foobar\build.xml
resolve:
[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: file = D:\workspace\foobar\ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: foo#bar;working@myhost
[ivy:retrieve] confs: [default, compile, master, javadoc]
[ivy:retrieve] found log4j#log4j;1.2.16 in internal
[ivy:retrieve] found javax.servlet#servlet-api;2.5 in internal
[ivy:retrieve] found com.someother#proprietary-core;1.2.3 in internal
[ivy:retrieve] found com.someother#proprietary;1.2.3 in internal
[ivy:retrieve] found com.someother#scanner;1.0 in internal
[ivy:retrieve] :: resolution report :: resolve 332ms :: artifacts dl 10ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 5 | 0 | 0 | 0 || 4 | 0 |
| compile | 4 | 0 | 0 | 0 || 4 | 0 |
| master | 4 | 0 | 0 | 0 || 4 | 0 |
| javadoc | 4 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy:retrieve]
[ivy:retrieve] :: problems summary ::
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: log4j#log4j;1.2.16: configuration not found in log4j#log4j;1.2.16: 'master'. It was required from foo#bar;working@myhost default
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]
[ivy:retrieve]
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Кажется, есть проблема с областями применения Maven. Но что именно мне здесь не хватает?
1 ответ
Проблема заключается в шаблоне, который вы используете в задаче получения плюща. Он должен включать необязательный атрибут "классификатор", чтобы обеспечить уникальность имени файла:
<ivy:retrieve pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
Классификатор - это вещь Maven, используемая для идентификации дополнительных артефактов, связанных с модулем Maven.
Дополнительное наблюдение
Нет необходимости в сложных настройках плюща. Отображения конфигурации определяют, какие артефакты загружаются из других модулей.
Удалите файл ivysettings.xml и попробуйте следующее в ivy.xml:
<dependency org="log4j" name="log4j" rev="1.2.16" conf="default->master,javadoc"/>
Это приводит к загрузке следующих файлов:
- log4j-1.2.16.jar
- log4j-1.2.16-javadoc.jar
Как это работает?
Для модулей Maven ivy создает конфигурацию, соответствующую каждой из стандартных областей действия Maven:
- мастер: только основная банка
- compile: основной jar, плюс jar-файлы, используемые для компиляции (это также область по умолчанию)
- время выполнения: основной jar, плюс файлы jar, используемые для компиляции, время выполнения
- test: основной jar, плюс jar-файлы, используемые для компиляции, времени выполнения, test
и дополнительно создает конфигурацию для каждого дополнительного артефакта (или классификатора), публикуемого модулем:
- источники
- Javadoc
Это позволяет вам смешивать и сочетать.