2014-09-15

【Java】簡単に依存性解消!「Ant + Ivy」 ― Javaを書かずにHello World

Categories: Java Ant Ivy Maven
ivy.png

[ 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』で紹介されています。

Ant 第2版
Ant 第2版
posted with amazlet at 14.09.15
Steve Holzner
オライリージャパン
売り上げランキング: 193,145
Ant in Action (Manning)
Ant in Action (Manning)
posted with amazlet at 14.09.15
Steve Loughran Erik Hatcher
Manning Pubns Co
売り上げランキング: 241,168

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.