他のすべてのプロジェクトを依存関係のリストとしてリストする追加の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>