Ivy, кажется, извлекает только банки javadoc

Я использую Ivy в своем проекте с плагином Ivy Eclipse.

Похоже, что некоторые файлы jar, которые загружаются и добавляются в мой проект, представляют собой файлы javadoc, а не файлы с фактическим кодом. Примечание. Это происходит не со всеми банками.

Например, добавив это в мой файл ivy.xml:

<dependency org="junit" name="junit" rev="4.8.2"/>

вызвал загрузку javadocs для junit и добавление его в мой путь к классам: введите описание изображения здесь

Это прерывает компиляцию моего проекта, так как ни один из модульных тестов не работает.

Это работало нормально, пока я не добавил ссылку на Spring, и все сломалось. Я попытался удалить ссылку и удалить junit из моего локального кеша, чтобы заставить ivy снова получить его, но проблема не устранена.

Вот мой общий блок зависимостей (с удаленной пружиной):

<dependencies>
    <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3.RC2"/>
    <dependency org="junit" name="junit" rev="4.8.2"/>
    <dependency org="org.mockito" name="mockito-core" rev="1.8.5"/>
    <dependency org="javax.persistence" name="persistence-api" rev="1.0"/>
</dependencies>

Вот мой ivysettings.xml для проекта:

<ivysettings>

    <caches artifactPattern="[organisation]/[module]/[revision]/[artifact].[ext]" />
    <settings defaultResolver="local.ibiblio.jboss.java-net.springsource" checkUpToDate="true" />

    <resolvers>
        <chain name="local.ibiblio.jboss.java-net.springsource">
            <filesystem name="libraries">
                <artifact pattern="${basedir}/ivy-repo/[artifact]-[revision].[type]" />
            </filesystem>
            <ibiblio name="ibiblio" m2compatible="true" />
            <ibiblio name="jboss" m2compatible="true"
                root="https://repository.jboss.org/nexus/content/groups/public-jboss" />
            <ibiblio name="java.net" m2compatible="true"
                root="https://repository.jboss.org/nexus/content/repositories/java.net-m2/" />
            <ibiblio name="java.net" m2compatible="true"
                root="http://repository.codehaus.org/" />
            <url name="com.springsource.repository.libraries.release">
                <ivy pattern="http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>

            <url name="com.springsource.repository.libraries.external">
                <ivy pattern="http://repository.springsource.com/ivy/libraries/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/libraries/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
            <url name="com.springsource.repository.bundles.release">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>

            <url name="com.springsource.repository.bundles.external">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
        </chain>

    </resolvers>
</ivysettings>

person Marty Pitt    schedule 13.02.2011    source источник


Ответы (1)


Некоторые модули с открытым исходным кодом включают необязательные файлы java doc jar. Чтобы удалить их, добавьте сопоставление конфигурации для каждой из ваших зависимостей:

   <dependency org="junit" name="junit" rev="4.8.2" conf="default"/>

Конфигурация по умолчанию в ivy эквивалентна области компиляции в модуле maven. Вот как дополнительные библиотеки могут быть автоматически исключены. (Проверьте их POM).

Лучший подход — объявить свои собственные конфигурации и сопоставление по умолчанию следующим образом:

<configurations defaultconfmapping="compile->default">
   <conf name="compile" description="Required to compile code"/>
   <conf name="test" description="Additional test dependencies" extends="compile" />
</configurations>

Затем в вашем файле ivy вам нужно только объявить нестандартные конфигурации:

<dependencies>
    <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3.RC2" conf="test->default"/>
    <dependency org="junit" name="junit" rev="4.8.2" conf="test->default"/>
    <dependency org="org.mockito" name="mockito-core" rev="1.8.5" conf="test->default"/>
    <dependency org="javax.persistence" name="persistence-api" rev="1.0"/>
</dependencies>

В этом случае мы хотим, чтобы в конфигурации test отображались только 3 тестовые библиотеки.

Все еще в замешательстве? Магия конфигураций ivy заключается в том, что вы используете их для управления путем к классам вашей сборки.

  <target name='dependencies' description='Resolve project dependencies and set classpaths'>
    <ivy:resolve/>

    <ivy:cachepath pathid="compile.path"  conf="compile"/>
    <ivy:cachepath pathid="test.path"     conf="test"/>
  </target>

Вот что делает Maven, когда вы объявляете тег scope для зависимости, например:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
    <scope>test</scope>
</dependency>

Области в Maven фиксированы. В плюще их может быть столько, сколько вам нужно.

person Mark O'Connor    schedule 14.02.2011
comment
Не за что. Да, документация ivy рекомендует использовать конфигурации, но трудно понять, почему :-) - person Mark O'Connor; 15.02.2011