Как использовать плющ для создания войны с копированием банок к каталогу lib

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

<mkdir dir="dist/lib"/>
<ivy:retrieve pattern="dist/lib/[artifact].[ext]" sync="true"/>
<war destfile="dist/${ivy.module}.war" basedir="build" includes="**/*.class"
    webxml="${war.webxml}">
    <fileset dir="${war.web}"/>
    <lib dir="dist/lib"/>
</war>

Проблема с этим кодом, это копирует банки дважды. Однажды в к моему dist/lib каталогу и снова в к войне, когда это создается. Это работает, но я не могу встряхнуть чувство, что существует лучший путь.

То, что я хотел бы сделать, является чем-то больше как следующее

<ivy:cachepath pathid="locpathref.classpath"/>
<war destfile="dist/${ivy.module}.war" basedir="build" includes="**/*.class"
    webxml="${war.webxml}">
    <fileset dir="${war.web}"/>
    <lib refid="locpathref.classpath"/>
</war>

Проблема состоит в том, что тег lib не берет в ремонте никакого вида. Какие-либо идеи или застревают я с дополнительным набором копий файла?

6
задан AmaDaden 16 January 2010 в 16:12
поделиться

1 ответ

Проблема здесь заключается в том, что тег lib - это пользовательский файл , который нацелен на файлы в архиве войны каталог. Можно ли можно было написать пользовательский войну , но я не думаю, что это стоит усилий.

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

Создайте конфигурацию, описывающую зависимости завода:

    <ivy-module version="2.0">
    <info organisation="apache" module="hello-ivy"/>
    <configurations>
        <conf name="build" description="Libraries needed to for compilation"/>
        <conf name="war" extends="build" description="Libraries that should be included in the war file" />
    </configurations>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.0" conf="build->*,!sources,!javadoc"/>
        <dependency org="commons-cli" name="commons-cli" rev="1.0" conf="build->*,!sources,!javadoc"/>
    </dependencies>
</ivy-module>

После этого вы извлекаете их в выделенный каталог (используя шаблон ) который можно просто включить использование войны TACKS lib Тег:

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

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

Преимущество этого подхода заключается в том, что вы используете атрибут AVY CONT каждого проекта Зависимость в конечном итоге решить, включена ли jar в файл войны или нет. Файл сборки больше не заботится.

В заключение я понимаю, что точка вашего поста была обеспокоена несколькими копиями ваших файлов JAR ... Использование моего предложенного подхода будет еще несколько копий, но я бы поставлю, что это не при условии, что у вас есть Clean Цель, чтобы удалить их после этого.

4
ответ дан 16 December 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: