依存jarファイルの、ファイルシステム上のフルパスの取得方法についてメモ。
Gradleでは、依存性は階層構造で管理されます。
Project ->
ConfigurationContainer ->
Configuration : これが最終的に依存性を集約します。
"ConfigurationContainer"は何かというと、依存性のセットを名前をつけて管理してます。
dependencies {
compile ...
runtime ...
testCompile ...
}
のように構成した場合、"compile", "runtime", "testCompile"というキーに対してそれぞれのConfigurationインスタンスをマッピングします。
ConfigurationContainer自体はProject.getConfigurations()または単純に"configurations"プロパティからアクセスできます。
これにより、例えば "compile" の依存性のセットに対して何か操作したい場合は、以下のように簡単に依存性のセット(Configuration)にアクセス出来ます。
task foo {
configurations.compile.(Configurationのプロパティやメソッド)
}
依存するJarファイルのフルパスを取得する手っ取り早い方法は、Configurationクラスのfiles()メソッドを使います。
apply plugin: 'java'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.1'
runtime 'ch.qos.logback:logback-classic:1.0.9'
testCompile 'junit:junit:4.11'
}
task depFiles {
configurations.each {
println "---------------------------------------------"
Configuration theConfig = it
println theConfig.name
println ">>> dependencies"
theConfig.dependencies.each {
println it.group + ":" + it.name + ":" + it.version
}
println ">>> resolved files"
theConfig.files.each {
// files()メソッドに何も渡さないと、すべてのjarファイルのフルパス
// がjava.io.Fileオブジェクトで取得される。
println it
}
}
println "============================="
// files()メソッドの引数に、booleanを返すclosureを指定し、
// 特定のjarファイルのフルパスだけを取得する。
configurations.compile.files({ dep -> dep.name == 'commons-lang3' }).each { file ->
println file
}
}
依存性の管理方法や、アクセス方法などはGradleの公式ドキュメントを一読されるのをおすすめします。