ivy простой общий репозиторий - PullRequest
1 голос
/ 05 ноября 2010

Я пытаюсь скомпилировать все подпроекты одного большого проекта в моей компании во многие банки с управляемыми зависимостями, чтобы не всем, кто работает над одним проектом, нужно было загружать только последние файлы из общего хранилища.1002 * ivy кажется решением нашей проблемы, потому что ivy говорит, что он очень хорошо интегрируется с ant (out build system).Но я не могу пройти эти уроки, они все более запутанные, чем полезные.

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

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 06 ноября 2010

Многомодульный проект описан в документации:

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

, а исходный код доступен в Subversion:

http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/example/multi-project/

Упрощенная сводка того, как это работает:

Сборка Wrapper

Вызывает каждую отдельную сборку модуля в правильном порядке.Если модуль A зависит от модуля B, то сначала будет построен B:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="build-all" default="build">

    <!--
    ==========================================================================
    Use the ivy buildlist task to create an ordered list of sub-project builds
    ==========================================================================
    -->
    <target name="build-list">
        <ivy:buildlist reference="build-path">
            <fileset dir="." includes="modules/**/build.xml"/>
        </ivy:buildlist>
    </target>

    <!--
    ==============================
    Invoke targets in sub-projects
    ==============================
    -->
    <target name="build" depends="build-list" description="Invoke build target on sub-projects">
        <subant target="build" buildpathref="build-path" />
    </target>

</project>

Для получения дополнительной информации см. Документацию buildlist .

Сборка модуля

Каждый модуль загружает свои зависимости в начале сборки

<target name="init">
    <ivy:settings file="../../ivysettings.xml"/>
    <ivy:resolve/>
</target>

В конце публикует свои встроенные артефакты:

<target name="publish" depends="build" description="Publish module artifacts to the respository">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true">
        <artifacts pattern="${build.dir}/[artifact].[ext]"/>
    </ivy:publish>
</target>

Не забывайте, что для всехчтобы это работало, каждый модуль должен объявлять, от чего он зависит и что он публикует

<ivy-module version='2.0'>

    <info organisation='com.myorg' module='mymod'/>

    <publications>
        <artifact name="mymod" type="jar"/>
    </publications>

    <dependencies>
         ..
    </dependencies>

</ivy-module>
...