こちらは「Ant と Maven ② Apache Ivy の詳細【build.xmlを読む】」の続きです。
目次記事はこちらです。
ivy.xml の内容
前の記事で build.xml については確認しました。次に ivy.xml を見ていきます。まずは ivy.xml の中身を見ておきましょう。
<!--
Apache のライセンスに関するコメント
-->
<ivy-module version="2.0">
<info organisation="org.apache" module="hello-ivy"/>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.6"/>
<dependency org="commons-cli" name="commons-cli" rev="1.4"/>
</dependencies>
</ivy-module>
各タグについてその役割を見ていきます。
<ivy-module version="2.0">
~~~ 略 ~~~
</ivy-module>
初めに現れる <ivy-module version="2.0"> は ivy.xml のルート要素です。build.xml の project タグと似たようなもので、<ivy-module> タグでファイルの中身全体を囲います。
<ivy-module> タグには verion 属性があります。現在、正しく ivy.xml を解析するには verion="2.0" しかありません。もう脳死で <ivy-module version="2.0"> って打っておきましょう。
<info organisation="org.apache" module="hello-ivy"/>
作成しているプロジェクトの情報を載せるタグが info タグです。プロジェクトの情報といってもわかりにくいと思いますが、まずは info タグに付属する属性の表を見てください。
| 属性 | 概要 |
|---|---|
organisation |
組織名やグループID。Maven の groupId と同じ |
module |
モジュール名。Maven の artifactId と同じ |
revision |
バージョン番号。Maven の version と同じ |
status |
モジュールの開発状態。status="integration" なら開発中みたいな |
ほかにも属性はありますが、主に使用されるのはこの辺です。上記の表に従って、<info organisation="org.apache" module="hello-ivy"/> の意味は「org.apache というグループIDを持つ組織が開発した hello-ivy というモジュール」になります。
実際にはこれに加えてバージョンなども書くことが多いです。
<info organisation="org.apache" module="hello-ivy" revision="0.1.3" status="integration"/>
このように書けば「org.apache というグループIDを持つ組織が開発した hello-ivy というモジュールは、バージョン 0.1.1 の integration(開発中)です」って意味になります。
そのほかの属性について、詳しくは公式ドキュメントまで!
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.6"/>
<dependency org="commons-cli" name="commons-cli" rev="1.4"/>
</dependencies>
プロジェクトが依存するモジュールを列挙するのが dependencies タグです。dependencies タグは一つの ivy.xml に一つだけ記載します。
dependencies タグの中には、依存するライブラリを dependency タグで並べます。ここに記載したモジュールは、Ant の実行時に Maven リポジトリからダウンロードされます。
dependency タグの属性でどんなライブラリに依存するのかを明記します。指定する属性の内容は下記の表のような感じです。
| 属性 | 概要 |
|---|---|
org |
依存するライブラリの組織名。例:org.junit.jupiter
|
name |
依存するライブラリの名前。例:junit-jupiter-api
|
rev |
依存するライブラリのバージョン。例:"5.10.3"
|
これまたほかにもいろいろな属性がありますが、詳しくは公式ドキュメントまで~。
以上です。思ったよりシンプルでしたね。
ivy.xml の configration タグ
ivy.xml では、依存関係の使い分けを configurations タグで行うことができます。
例えばテストでしか使いたくないライブラリがあったとき、本番環境にも紛れ込むのは嫌ですよね。そんな時は下記のように configuration タグを挿入します。
<ivy-module version="2.0">
<info organisation="org.apache" module="hello-ivy"/>
<configurations>
<conf name="compile"/>
<conf name="test" extends="compile"/>
</configurations>
<dependencies>
~~~ 略 ~~~
</ivy-module>
configurations タグの中では conf タグというものでコンフィグレーション(構成)を定義します。ここで定義できる構成の名前は自由に決めることができます。
上記の例では compile という構成と、 test という構成を作っています。これ以降、ivy.xml の dependency タグで、「このモジュールは test の時だけ使う!」とか指定することができます。
また、<conf name="test" extends="compile"/> を見ると、extends 属性が指定されているのがわかります。extends 属性は「構成の継承」を行う属性です。今回の例でいえば、「テスト時にコンパイル用の構成も引き継ぐ(依存ライブラリもダウンロードする)」って感じです。
configurations タグがある場合の dependency タグの書き方も見ておきます。
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.6" conf="compile->default"/>
<dependency org="commons-cli" name="commons-cli" rev="1.4" conf="compile->default"/>
<dependency org="org.junit.jupiter" name="junit-jupiter-api" rev="5.10.3" conf="test->default"/>
</dependencies>
新たに conf 属性という属性が追加されました。conf 属性では conf="myConf->dpConf" という書き方をします。
conf="myConf->dpConf" の意味は「自分で定義した構成 myConf に依存ライブラリ(依存モジュール)が持つ構成 dpConf を割り当てる」という意味です。
ちょっとわかりにくいかもしれませんが、ダウンロードしたいライブラリも当然コンフィグレーションを持っています。ダウンロードする際に相手方ライブラリのどの構成が欲しいかをここで指定できます。
一般的にどのライブラリも default 構成を持っているので、基本 default を指定します。
次の記事から Maven に入りますが、すでに Maven に振れたことがある人は Maven の scope の柔軟バージョンと理解するといいです。
Ivy についてはこれで終わりです。
次の記事
Mavenの基礎 作成中...