0

ここのアイビーには比較的新しい。

同じ組織の同じリポジトリにすべて公開するプロジェクトのリストが増えています。そして、可能であれば、別のプロジェクトからそれらすべてのプロジェクトによって作成されたアーティファクトへの依存関係を宣言する方法を見つけようとしています。

私のivisettings.xmlには、そのリポジトリの場所を指すリゾルバがすでにあります。そのリポジトリ内のすべてのアーティファクトは同じ組織からのものです。別のプロジェクトからの依存関係として、その場所にアーティファクトを簡単に含める方法があるかどうかを判断しようとしています。名前にワイルドカードを使用して、次のようにこれを実行できることを期待していました。

    <dependencies>
            <dependency org="my.org.name" name="**" rev="${current.iteration}" conf="master" />
    </dependencies>

しかしもちろん、上記は機能しません。したがって、ポインタ/コメント/ポインタの提案は歓迎されます。私はこれをやりたいと思う最初の人にはなれません。そのため、これを行う方法が必要であり、検索で適切なキーワードを使用していない可能性があります。ありがとう。

4

1 に答える 1

1

他のすべてのプロジェクトを依存関係のリストとしてリストする追加のivyファイルを公開します。

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects" revision="1.0.0" status="release" publication="20130215110241"/>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="1.0.0"/>
        <dependency org="my.org.name" name="projectB" rev="1.0.0"/>
        <dependency org="my.org.name" name="projectC" rev="1.0.0"/>
        ..
        ..
    </dependencies>

</ivy-module>

この特別なivyモジュールに対して単一の依存関係を作成すると、他のプロジェクトアーティファクトが推移的な依存関係として取り込まれます。

<dependency org="my.org.name" name="projects" rev="1.0.0"/>

強化

さらに進んで、プロジェクトの成果物を分類するためにさまざまな構成を作成できます。

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects" revision="1.0.0" status="release" publication="20130215110241"/>

    <configurations>
        <conf name="web-apps" description="Projects which provide functionality for webapps"/>
        <conf name="standalone" description="Projects which provide functionality for stand-alone java apps"/>
    </configurations>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="1.0.0" conf="webapps->default"/>
        <dependency org="my.org.name" name="projectB" rev="1.0.0" conf="standalone->default"/>
        <dependency org="my.org.name" name="projectC" rev="1.0.0" conf="webapps->default;standalone->default"/>
    </dependencies>

</ivy-module>

構成は非常に便利なツタの機能です。クライアントビルドは、マッピングを使用して、Webアプリケーションまたはスタンドアロン開発のいずれかに関連するアーティファクトを取り込むことができます。この機能はMavenの「スコープ」に似ていますが、はるかに強力です。

更新:動的リビジョン

「プロジェクト」モジュールを公開するときは、動的リビジョンを使用してメンテナンスを簡素化することをお勧めします。

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects"/>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="latest.release"/>
        <dependency org="my.org.name" name="projectB" rev="latest.release"/>
        <dependency org="my.org.name" name="projectC" rev="latest.release"/>
        ..
        ..
    </dependencies>

</ivy-module>

公開タスクは、各プロジェクトの最新バージョンで解決されたivyファイルを生成してプッシュします。

それでも各プロジェクトをリストする必要がありますが、これは実際には良いことです。これは、「プロジェクト」モジュールの古いバージョンを取り込むと、ある時点で同じ数のリビジョンが生成されることを意味します。

ivyファイルを生成する

最後に、可変数のプロジェクトを使用してこのプロセスを完全に自動化するには、「プロジェクト」のivyファイルを生成できますか?

以下は、使用できるGroovyスニペットです。

<groovy>
    import groovy.xml.MarkupBuilder

    new File("build/ivy.xml").withWriter { writer ->
        def xml = new MarkupBuilder(writer)
        xml."ivy-module"(version:"2.0") {
            info(organisation:"my.org.name", module:"projects")
            dependencies() {
                new File("/path/to/projects/directory").listFiles().each { dir ->
                    dependency(org:"my.org.name", name:dir.name, rev:"latest.release")
                }
            }
        }
    }
</groovy>
于 2013-03-04T21:31:01.943 に答える