【Java】簡単に依存性解消!「Ant + Ivy」 ― Javaを書かずにHello World
[ PR ]
Javaistの皆さん、プロジェクト管理ツールは何を使っていますか?
Mavenを使ってる方が多いと思いますが、Maven XMLを書くのは大変ですよね。一方で、Antを使うとシンプルに書けますが、『依存性の解消』が長年の課題でした。
そこで、Ivyを使うと簡単に依存性を解消できます。Ivy入門は既にたくさんありますので、今回は実践的でシンプルに説明をします。
マジックを行う手順
1) antおよびivyをインストールします。(例:brew install ant ivy)
2) $HOME/.ant/lib/ に、ivy-xxx.jarをコピーします。
3) 適当なディレクトリにivy-sanpleフォルダを作り、そこに移動します。
4) そこに、以下のbuild.xmlを作ります。
<project name="ivy-sample" default="run" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="lib.dir" value="lib" />
<path id="lib.path.id">
<fileset dir="${lib.dir}"/>
</path>
<!-- resolve -->
<target name="resolve">
<mkdir dir="${lib.dir}"/>
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/>
</target>
<!-- run -->
<target name="run" depends="resolve">
<java jar="${lib.dir}/rhino.jar" fork="true">
<arg value="-e"/>
<arg value="print('hello, world')"/>
</java>
</target>
</project>
5) libフォルダを作り、ant
とタイプします。
BUILD FAILED
/Users/funatsu/lab/ivy-sample/build.xml:11: syntax errors in ivy file: java.text.ParseException: /Users/funatsu/lab/ivy-sample/ivy.xml (No such file or directory) in file:/Users/funatsu/lab/ivy-sample/ivy.xml
at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser$Parser.parse(XmlModuleDescriptorParser.java:278)
... 27 more
エラーが出ましたね。
6) ivy.xmlがありませんと怒られましたので、ivy.xmlを作ります。
<ivy-module version="2.0">
<info organisation="" module="ivy-sample"/>
<configurations>
<conf name="web"/>
</configurations>
<dependencies>
<dependency org="org.mozilla" name="rhino" rev="1.7R4" conf="web->default"/>
</dependencies>
</ivy-module>
7) ant
と再度タイプします。
resolve:
[ivy:retrieve] :: Apache Ivy 2.3.0 - 20130110142753 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: url = jar:file:/Users/funatsu/.ant/lib/ivy-2.3.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: #ivy-sample;working@f.local
[ivy:retrieve] confs: [web]
[ivy:retrieve] found org.mozilla#rhino;1.7R4 in public
[ivy:retrieve] :: resolution report :: resolve 259ms :: artifacts dl 5ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| web | 1 | 0 | 0 | 0 || 1 | 0 |
---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: #ivy-sample
[ivy:retrieve] confs: [web]
(.... 中略 ....)
run:
[java] Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
[java] hello, world
BUILD SUCCESSFUL
Total time: 2 seconds
長いですが、最後に hello, worldと表示されています。
何が起こったのか
実は、build.xmlの最初に、xmlns:ivy="antlib:org.apache.ivy.ant"と書いたことで、Ivyプラグインを読み込んでいるのです。
そのプラグインはもちろん、最初の準備で配置した~/.ant/lib/ivy-xxx.jar
を読み込んでいます。
Ivyプラグインを読み込むと<ivy:retrieve/>
というコマンドが実行できるようになり、その中でivy.xmlが読まれ、自動的に依存性が解決されるのです。
また、なぜant
とタイプするだけで実行されるかというと、
- build.xmlの1行目に、
default="run"
と書いており - 15行目に、
<target name="run" depends="resolve">
と書くことで、runタスクの前にresolveタスクを実行される
というマジックが発動しているからです。
ちなみに…
ちなみに、先程のAntスクリプトは、RhinoというJavaScriptエンジンを使って、"hello, world"と表示させるものです。
その証拠に、ls lib
とタイプするとrhino.jar
がダウンロードされています。
これがIvyの威力なのです。同様に、jruby-completeをダウンロードさせれば、JRubyを実行することだってできます。
リポジトリの探し方
ちなみに、IvyはMavenのリポジトリを探索します。つまり、AntでありながらMavenを利用しているのです。
ivy.xmlに記載する<dependency ... />
については、http://mvnrepository.com/で探すことができます。
以下は、http://mvnrepository.com/artifact/org.mozilla/rhino/1.7R4 を表示したものです。
Ivyタブに、Ivyに記載するコードが載っていますね。
まとめ
簡単でしたが、Ivyに関してはいろんなドキュメントがあるので、これくらいで入門には十分だと思います。
もう少し知識がついたら、早速小さなプロジェクトで使って見て下さい。
(注)Ivyに関する日本語の本は、Amazonではまだないようです。英語なら『Ant in Action』で紹介されています。
Manning Pubns Co
売り上げランキング: 241,168