依存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の公式ドキュメントを一読されるのをおすすめします。