разрешение файлов javadoc с помощью Ant и Ivy - PullRequest
6 голосов
/ 14 июля 2011

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

Что мне здесь не хватает? Как я могу заставить Айви разрешить файлы 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 Ответ

8 голосов
/ 14 июля 2011

Проблема в том, какой шаблон вы используете в задаче получения плюща.Он должен включать необязательный атрибут «классификатор», чтобы гарантировать уникальность имени файла:

<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:

  • master: только основная банка
  • compile: основной jar, плюс jar-файлы, используемые для компиляции (это также область по умолчанию)
  • время выполнения: Main jar, плюс jar-файлы, используемые для компиляции, runtime
  • test: Main jar, плюс jar-файлыиспользуется для компиляции, выполнения, тестирования

и дополнительно создает конфигурацию для каждого дополнительного артефакта (или классификатора), публикуемого модулем:

  • sources
  • javadoc

Это позволяет вам смешивать и сочетать.

...