2015-06-08 3 views
1

Я пытаюсь использовать Ivy для автоматической загрузки файлов JAR, необходимых для запуска PMD и Findbugs. По большей части у меня нет проблем с загрузкой зависимостей, настройкой cachepath и т. Д. Дело в том, что если я использую Ant для запуска PMD, я хочу только загрузить зависимости PMD и аналогичные для Findbugs. Так что я сделал два разных файл XML, определяющей зависимость, conf/ivy/pmd.xml и conf/ivy/findbugs.xml, и мою PMD задачу, которую я что-то вроде:Ivy: несколько задач извлечения с различными файлами зависимостей

<ivy:retrieve file="conf/ivy/pmd.xml"/> 
    <ivy:cachepath pathid="pmd.path"/> 

Это прекрасно работает, если в одном Ant вызова я использую только PMD или использовать только FindBugs. Однако, если я пытаюсь использовать оба в одном вызове, то вторая задача ivy:cachepath будет действовать точно так же, как и первая для запуска, даже если у них разные атрибуты file.

ответ

1

Проблема заключается в том, что Ivy retrieve task является post resolve taks и автоматически/неявно запускает resolve задачу, если он не был запущен еще, так что первая retrieve задачей является только один, чтобы вызвать решение.

Решение поставить все зависимости в один Ivy module configuration file, сделать различные зависимости часть различных конфигураций, а затем использовать атрибут conf при вызове retrive задач. Например, я создал "FindBugs" конф и "PMD" конф в одном файле conf/ivy/ivy.xml:

<ivy-module version="2.0"> 
    <info organisation="com.nightrealms" module="JavaLike"/> 

    <configurations> 
     <conf name="findbugs" description="findbugs JAR files"/> 
     <conf name="pmd"  description="PMD JAR files"/> 
    </configurations> 

    <dependencies> 
     <dependency org="net.sourceforge.pmd" name="pmd-core" rev="5.3.2" 
      conf="pmd->default"/> 
     <dependency org="net.sourceforge.pmd" name="pmd-java" rev="5.3.2" 
      conf="pmd->default"/> 
     <dependency org="com.google.code.findbugs" name="findbugs" 
      rev="3.0.1" conf="findbugs->default"/> 
    </dependencies> 
</ivy-module> 

Тогда в build.xml:

<ivy:retrieve file="conf/ivy/ivy.xml" conf="findbugs"/> 
Смежные вопросы