2015-03-31 4 views
1

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

<?xml version="1.0"?> 
<ivy-module version="2.0"> 
    <info organisation="my.org" module="my-stuff" status="release"/> 
    <configurations> 
     <conf name="runtime"/> 
     <conf name="provided" extends="runtime"/> 
     <conf name="test"  extends="provided"/> 
    </configurations> 
    <publications> 
     <artifact name="my-stuff" type="jar" ext="jar" conf="*"/> 
     <artifact name="my-stuff" type="source" ext="zip" conf="*"/> 
    </publications> 
    <dependencies> 
     <dependency org="javax.servlet"  name="servlet-api" rev="2.4" conf="provided,test -> master"/> 
     <dependency org="org.apache.tomcat" name="tomcat-dbcp" rev="7.0.47" conf="provided,test -> master"/> 
     <dependency org="log4j"    name="log4j"  rev="1.2.17" conf="* -> master"/> 
     <dependency org="my.org"   name="my-module" rev="1.2.3" conf="* -> default"/> 
     <dependency org="junit"    name="junit"  rev="4.5" conf="provided,test -> master"/> 
     <dependency org="org.apache.ant" name="ant"   rev="1.8.4" conf="provided,test -> master"/> 
    </dependencies> 
</ivy-module> 

До сих пор, так хорошо. Я публикую банку my-stuff, и если я попытаюсь получить его зависимости по конфигурации, я получаю то, что ожидаю, две зависимости в конфигурации времени выполнения и шесть из них в предоставленных и тестовых конфигурациях. Проблема начинается, когда я пытаюсь получить зависимости от чего-то, что зависит от my-stuff. Я использую этот плющ файл:

<?xml version="1.0"?> 
<ivy-module version="2.0"> 
    <info organisation="my.org" module="test-my-stuff" status="release"/> 
    <configurations> 
     <conf name="runtime"/> 
     <conf name="provided" extends="runtime"/> 
     <conf name="test" extends="provided"/> 
    </configurations> 
    <dependencies> 
     <dependency org="my.org" name="my-stuff" rev="1.1"/> 
    </dependencies> 
</ivy-module> 

Теперь, если я пытаюсь восстановить конфигурацию runtime, вместо того, чтобы получать my-stuff банку, log4j и my-module, я получаю двенадцать банок, в том числе и activation.jarmail.jar, что я не получаю когда я использую первый файл плюща для извлечения. Почему мой второй файл плюща вытягивает все в конфигурацию времени выполнения? Что я делаю неправильно?

Если, с другой стороны, я добавляю сопоставление конфигурации для зависимостей во втором файле, например runtime->runtime;provided->provided;test->test, разрешение не будет выполнено, утверждая, что он не может найти my-stuff.

ответ

2

Я думаю, ваш вопрос, как вы объявили о конфигурации опубликованных артефактов:

<publications> 
    <artifact name="my-stuff" type="jar" ext="jar" conf="*"/> 
    <artifact name="my-stuff" type="source" ext="zip" conf="*"/> 
</publications> 

Вы в основном говорят, что они должны быть частью «выполнения», «при условии» и конфигурации «тест». Кроме того, поскольку 3 конфигурации вложены, что-то в «runtime» будет автоматически также «предоставлено» и «проверять».

Так что я предлагаю реструктуризацию файла плюща следующим образом:

<configurations> 
    <conf name="default" extends="runtime,master"/> 
    <conf name="master"/> 
    <conf name="sources"/> 
    <conf name="provided"/> 
    <conf name="runtime"/> 
    <conf name="test" extends="runtime"/> 
</configurations> 
<publications> 
    <artifact name="my-stuff" type="jar" ext="jar" conf="master"/> 
    <artifact name="my-stuff" type="source" ext="zip" conf="sources"/> 
</publications> 

Примечание:

  • Главного артефакт находится на автономной конфигурация «мастер», который также получает включен в конфигурации «по умолчанию»
  • Дополнительная конфигурация для «источников». Сохраняет его изолированность от времени выполнения и позволяет его явно загружать.
  • «предоставленный» объем является автономным. Это важно, так как вы не хотите, чтобы он был случайно упакован в военный файл.

декларация Зависимость теперь должна работать, но всегда хорошая идея, чтобы обеспечить четкое отображение конфигурации, в данном случае к нашей новой конфигурации «по умолчанию»:

<dependency org="my.org" name="my-stuff" rev="1.1" conf="runtime->default"/> 
+0

Ok, спасибо. Это исправило мою проблему. –

+0

Что-то еще, что было частью моей проблемы - если вы не обновляете свою версию публикации, кеш не обновляется. Поэтому необходимо было очистить кеш. –

+0

@ DavidStanley Ah ... Ну, это цель кеша .... Я избегаю этой проблемы, используя очень полезную задачу ivv buildnumber, чтобы генерировать уникальный номер выпуска каждый раз, когда я публикую артефакт. См .: http://ant.apache.org/ivy/history/latest-milestone/use/buildnumber.html. –