Dev Study
← Spring コース

27. Ant: 依存の扱いと、古いプロジェクトの読み方

本体は を取ってきません。このコースで扱うのは、 に人が置く方式と、 という道具に取らせる方式の2つです。手で置く場合、 の URL はから決まるので、そこから取って lib/ に置き、< dir="lib" includes="*"/> で lib/ 直下の 全部をにします。(使うライブラリが使うもの)も人が置きます。

Ivy を使うと、ivy の JAR を で渡し、 に dependency を1行書き、 に を置くと、 7.0.9 に要る11本が lib/ に揃いました。レッスン「Ant で の を作る」で人が置いた11本と同じ顔ぶれです。Ivy は取ったものを に溜め、2回目は取りません。

古い Ant のプロジェクトでは、build.xml の と の値を先に見ます。src、build、dist、lib、 の名前は全部ここで決まります。lib/ に JAR が直接あれば手置き、ivy.xml があれば Ivy です。WebContent/ は、(Java の統合開発環境)の Web プロジェクトが以前の既定で付けていた、WAR の中身の元の名前です。

点線の付いた語はタップすると説明が出ます。用語集を開く →

依存が lib/ に来るまでの2つの道(左: Ivy、右: 人が置く)
ivy.xml の1行<dependency org="org.springframework" name="spring-webmvc" rev="7.0.9" conf="default"/>
人が POM を辿るspring-webmvc の POM → spring-web、spring-context … の POM と順に読み、11本を書き出す
どちらも Maven Central へ。URL は座標から決まる
repo1.maven.org/maven2/org/springframework/spring-webmvc/7.0.9/spring-webmvc-7.0.9.jarグループ名のドットを / に、続けて名前、版、名前-版.jar
Ivy: resolve(POM を辿り、ダウンロード)/ 人: URL から取って手元に置く
~/.ivy2/cache/<org>/<module>/jars/Ivy の溜め場。2回目はダウンロードが無く、lib/ に揃っていれば 0 artifacts copied, … already retrieved
人が取った JARspring-webmvc-7.0.9.jar 1,107,415 B など11本(レッスン「Ant で Spring の WAR を作る」)
Ivy: retrieve(lib/ へコピー)/ 人: lib/ に置く
lib/*.jar 11本(8,459 kB)spring-webmvc/web/context/aop/beans/core/expression 7.0.9、commons-logging 1.3.5、micrometer 2本、jspecify
<path id="compile.classpath"><fileset dir="${lib.dir}" includes="*.jar"/></path>
<javac classpathref="compile.classpath">コンパイル時のクラスパス
<war><lib dir="${lib.dir}"/></war>WEB-INF/lib に同梱される
  • ・Apache Ivy 2.6.0 / Ant 1.10.18 / JDK 25 での実測です。Ivy が lib/ に置いた11本は、レッスン「Ant で Spring の WAR を作る」で人が置いた11本とファイルサイズまで一致しました。違いは jspecify だけで、人が置いたのは 1.0.0、Ivy は POM に 1.0.0 と 1.0.1 の両方を見つけて新しい 1.0.1 を選びました(ログの evicted modules の行)
  • ・人が取る方式で .sha1 と照合したのは、このセクションの実験で使った commons-lang3 と JUnit の2本です。Spring の11本は URL から取って置いただけで、照合の記録はありません
  • ・dependency に conf="default" を書かないと、その POM がテスト用に書いている依存や -sources.jar、-javadoc.jar まで取ってきます。commons-lang3 1本の指定で lib/ に JAR が25本入りました。本数はライブラリごとに違います
  • ・Ivy は Spring Boot の BOM(依存の版をまとめて決める仕組み。後のレッスンで扱います)を適用しません。各 POM が直接書いた版のまま取ってきます
  • ・Ivy のチュートリアルの原文: the retrieve task performs a resolve (which resolves dependencies and downloads them to a cache) followed by a retrieve (a copy of those file to a local project directory).
  • ・WebContent について。Eclipse のヘルプの原文は The Web content folder represents the contents of the WAR file that will be deployed to the server. / Though the default name given to the folder is WebContent, you can change the name ですが、Eclipse WTP のソースでは 2021年1月のコミット([417874] Change default webcontent folder paths)で既定が WebContent から src/main/webapp に変わり、同年2月の開発者メーリングリストでも 3.21.0 の候補版でそうなっていると報告されています。そのため、新しく作ったプロジェクトでは WebContent という名前を見ないことがあります
  • ・Ant でビルドする場合、WAR に何が入るかは build.xml の <war> が決めます。レッスン「Ant で Spring の WAR を作る」では WebContent/ の中身に加えて、build/classes が WEB-INF/classes へ、lib/*.jar が WEB-INF/lib へ入りました
  • ・Eclipse のヘルプの原文(.project について): This file is always called ".project", and is located as a direct member of the project's content area. Eclipse の .project や .classpath が Ant のプロジェクトにどれくらいの頻度で同居するかは確かめていません

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Java

図やコードに出てくる用語(タップで説明)

サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗