依存関係のサンプルなので普通のJavaプロジェクトを作成
mvn archetype:generate
- groupId: net.jp.kronos.hq
- artifactId: maven-dependency-tutorial
- version: 1.0-SNAPSHOT
以下のコマンドでそのプロジェクトが持つ依存関係をtree表示出来る
mvn dependency:tree
- サンプルプロジェクトではデフォルトでjunitが設定されている
- maven central repositoryは明示的なリポジトリ定義不要
- maven central repository: http://repo.maven.apache.org/maven2/
- 実際にWeb上にあるリポジトリの中も確認してみる
maven central repository以外のリポジトリにある依存関係を追加
-
s2-framework を追加してみる
-
リポジトリ
<repositories> <repository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven2 Repository</name> <url>http://maven.seasar.org/maven2</url> </repository> </repositories>
-
依存関係
<dependencies> ... <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.46</version> <scope>compile</scope> </dependency> </dependencies>
-
-
実際にWeb上にあるリポジトリの中も確認してみる
インストール
mvn install
- ローカルリポジトリ
- ~/.m2/repository/
- ローカルリポジトリに追加されていることを確認
artifactIdを変更してインストールし、ローカルリポジトリを使って依存関係を解決
- ローカルリポジトリも明示的なリポジトリ定義不要
- git使ってbranchでプロジェクトを切り替えます
-
git初期化とbranch切り替え
git init echo target/ > .gitignore git add . git commit -a -m "first" git checkout -b tmp
-
artifactIdを変更してインストール
- artifactId: maven-dependency-tutorial-tmp
- gitは適宜コミットしてください
-
branch切り替え
git checkout master
-
依存関係を整理
- 今までの依存関係削除
- tmpを依存関係に追加
runtime, compile以外スコープは依存関係には加えられらない
- tmpプロジェクトのs2-frameworkスコープを切り替えて確認
- スコープは依存するかしないかを切り替えてる訳ではない
- compile等他のプラグインでも使用
- スコープの詳細
- TODO: http://~
依存関係が重複した場合の優先度確認
-
メインプロジェクトと依存先
s2-frameworkで使われている commons-logging をメインプロジェクトで定義してみる
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.0</version> </dependency>
- メインプロジェクトの依存関係を優先
- version等を変更したりして確認
- versionは関係ない(??)
-
依存先同士(階層違い)
tmp2プロジェクトを作成し、依存先にあるartifactが重複するように定義してみる
- 階層が浅い依存関係を優先
-
依存先同士(同階層)
tmpプロジェクトでtmp2依存関係を追加し同階層の依存関係が重複する状況を作成
- 定義順序で依存関係が変化
- 依存関係の優先度は以下で決まる
- 階層(浅い方が優先)
- 同階層の場合、定義順序
- versionは関係ない
TODO: mvn dependency:treeで表示されてないだけなのか確認
不要な依存関係を排除する方法を確認
s2-frameworkのjunit スコープtestが切られてない... メインプロジェクトでjunitを定義するれば改善 junit-depを使おうとするとまた出てくる excludeする
<dependency>
<groupId>net.jp.kronos.hq</groupId>
<artifactId>maven-tutorial-tmp</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>