2017-02-10 15 views
0

Есть ли способ выбрать, какой файл ivy.xml использовать при вызове ivy:retrieve?ivy: retrieve Выберите, какой файл ivy.xml использовать

Глядя at the documentation кажется, что я могу использовать settingsRef свойство для выбора IVY файла использовать настройки, но это не ivysettings.xml файла Я хотел бы изменить, а это ivy.xml. Мой случай использования является следующее: зависимости

  • У меня есть главный ivy.xml файл, который я использую, чтобы принести мою во время компиляции и во время выполнения
  • У меня также есть ряд зависимостей инструмента цепи сборки, т.е. баночки используемый некоторыми задачами Ant (например, такие вещи, как findbugs, cobertura, pmd, проверка соответствия стиля кода и т. д.). Это материал, который не является ни компиляцией, ни временем выполнения моего кода. Более того, это то же самое во всех проектах, которые я создаю с помощью этой цепочки инструментов, поэтому я хотел бы иметь возможность идентифицировать эти зависимости в одном отдельном файле ivy.xml, который я могу просто скопировать в своих проектах.

ответ

0

Так вот как я это сделал:

<target name="fetch-buildsystem-deps" depends="configure-ivy-settings"> 
    <ivy:resolve file="ivy-buildsystem.xml"/> 
    <ivy:retrieve conf="build-system" 
        pattern="${lib-ivy-buildsystem.dir}/[artifact]-[revision](-[classifier]).[ext]" 
        sync="true" 
        type="jar, bundle"/> 
</target> 

& hellip; где файл ivy-buildsystem.xml определяет только зависимости моих задач Ivy. Например. содержит такие материалы, как:

<configurations> 
    <conf name="build-system" description="artifacts needed by the build-system itself"/> 
</configurations> 
<dependencies> 
    <!--dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="build-system->master"/--> 
    <dependency org="com.puppycrawl.tools"  name="checkstyle" rev="5.9" conf="build-system->default"/> 
    <dependency org="com.google.code.findbugs" name="findbugs-ant" rev="3.0.0" conf="build-system->default"/> 
    <dependency org="net.sourceforge.pmd"  name="pmd-java"  rev="5.5.3" conf="build-system->default"/> 

</dependencies> 
2

Короткий Anwer заключается в использовании конфигурации плюща:

http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html

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

Пример

Вот моя решительность цель:

<target name="resolve" description="Download dependencies and setup classpaths"> 
    <ivy:resolve/> 
    <ivy:report todir='${reports.dir}/ivy' graph='false' xml='false'/> 

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

, которые затем могут быть использованы непосредственно в моих различных задачах, требующих классы

<!-- Compiling code --> 
<javac srcdir="${src.dir}"... classpathref="compile.path"/> 

<!-- Testing code --> 
<junit haltonfailure="yes" fork="true"> 
    <classpath> 
    <path refid="test.path"/> 
    <pathelement path="${classes.dir}"/> 
    <pathelement path="${test.classes.dir}"/> 
    </classpath> 
    .. 
</junit> 

<!-- 3rd party ANT tasks --> 
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="build.path"/> 

<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="build.path"/> 

.. 

Лично я использую только получить задание строить архивы. Здесь я снова использовать конфигурации для того, чтобы контролировать банки, которые я хочу:

<ivy:retrieve pattern="${build.dir}/libs/[artifact].[ext]" conf="runtime"/> 

<war destfile="${war.file}" webxml="${resources.dir}/web.xml"> 
    <fileset dir="${resources.dir}" excludes="web.xml"/> 
    <classes dir="${build.dir}/classes"/> 
    <lib dir="${build.dir}/libs"/> 
</war> 

IVY файл

<ivy-module version="2.0"> 
    <info organisation="com.myspotontheweb" module="demo"/> 

    <configurations> 
     <conf name="compile" description="Required to compile application"/> 
     <conf name="runtime" description="Additional run-time dependencies" extends="compile"/> 
     <conf name="test" description="Required for test only" extends="runtime"/> 
     <conf name="build" description="ANT task dependencies"/> 
    </configurations> 

    <dependencies> 
     <!-- compile dependencies --> 
     <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/> 

     <!-- runtime dependencies --> 
     <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/> 

     <!-- test dependencies --> 
     <dependency org="junit" name="junit" rev="4.11" conf="test->default"/> 

     <!-- Build dependencies --> 
     <dependency org="org.codehaus.sonar-plugins" name="sonar-ant-task" rev="2.1" conf="build->default"/> 
     <dependency org="org.jacoco" name="org.jacoco.ant" rev="0.6.3.201306030806" conf="build->default"/> 

    </dependencies> 

</ivy-module> 

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

Во-вторых отображение конфигурации является критическим:

  • myconf-> по умолчанию: Включает в зависимости переходных
  • myconf-> мастер: Просто модуль баночка без зависимостей
+0

Одобрено. Однако я знал о возможности использования разных конфигураций. Я специально запрашивал отдельные файлы IVY, поскольку мне нравится иметь те же «зависимости ANT-задачи» от нескольких проектов и иметь отдельные файлы IVY, что позволяет легко проверить (используя diff или даже символические ссылки), тогда как с вашим решением вы должны визуально проверить файлы, чтобы усвоить себя, что «зависимости от ANT-задач» действительно одинаковы (что важно для вас, конечно). Я считаю, что я достиг этого, но пока я не отправлю свой собственный ответ, я рад принять ваш ответ, поскольку это отличная запись. –

+0

Кстати, мне не нравится использовать 'ivy: cachepath', поскольку он немного непрозрачен в отношении банок, которые действительно включаются. Я использую 'ivy: retrieve' даже для« зависимостей задачи ANT », так как мне нравится просматривать каталог в файловой системе и видеть все введенные банки.' Ivy: cachepath' не дает такой видимости, насколько это возможно Я в курсе. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^