2012-03-06 12 views
24

私はGradleを使ってHadoopタスクを自動化しています。 Hadoopを呼び出すときは、コードが依存するいくつかのjarファイルへのパスを渡す必要があります。そのため、Hadoopはmap/reduceフェーズでその依存関係を送信できます。Gradleでもっともきれいな方法でgradle依存キャッシュのjarファイルへのパスを取得する

私はうまくいくものを見つけましたが、それは面倒な気がしています。どこかで見つからない機能があるかどうかは疑問です。

これは、構成内のjarファイルのすべてを反復処理が正しいものを見つけるために、というのが私のGradleのSolr 3.5.0 jarファイルに依存しているスクリプト、およびfindSolrJarタスクの簡易版である:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.apache.solr:solr-solrj:3.5.0' 
} 

task findSolrJar() { 
    println project.configurations.compile*.toURI().find { URI uri -> new File(uri).name == 'solr-solrj-3.5.0.jar'} 
} 
これを実行している

は私にこのような出力が得られます。

gradle findSolrJar                                                               
file:/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.apache.solr/solr-solrj/3.5.0/jar/74cd28347239b64fcfc8c67c540d7a7179c926de/solr-solrj-3.5.0.jar 
:findSolrJar UP-TO-DATE 

BUILD SUCCESSFUL 

Total time: 2.248 secs 

はこれを行うには良い方法はありますか?

答えて

24

コードを少し簡略化できます(例:project.configurations.compile.find { it.name.startsWith("solr-solrj-") })。

20

アーティファクトの専用設定を作成して、それをきれいに保つこともできます。そして、それは潜在的にいくつかの場所を返すことができるという事実は、あなたのユースケースのためにうまく動作するかどうか(それはいくつかの場所で同じjarファイルを解決する場合はどうなります)asPathを使用します。

configurations { 
    solr 
} 

dependencies { 
    solr 'org.apache.solr:solr-solrj:3.5.0' 
} 

task findSolrJars() { 
    println configurations.solr.asPath 
} 

コピー&ペーストを避けるために、場合にあなたにも必要compile設定でその瓶は、あなたのような、compile 1には、この専用の設定を追加することがあります。

dependencies { 
    solr 'org.apache.solr:solr-solrj:3.5.0' 
    compile configurations.solr.dependencies 
} 
1

ここで私はそれをやった方法です:

project.buildscript.configurations.classpath.each { 
    String jarName = it.getName(); 
    print jarName + ":" 
} 
+1

「:」は途中でWindowsでは動作しません。 'File.pathSeparator'を使うとそれを修正できます。 – Chilloutman

+0

@Chilloutman私は同意します。パス区切りをハードコードしないでください。 –

1

gwtをビルドするためのJavaビルドフラグとしてlombok.jarが必要でした。

configurations { 
lombok 
} 
dependencies { 
    lombok 'org.projectlombok:lombok+' 
} 
ext { 
    lombok = configurations.lombok.asPath 
} 

compileGwt { 
    jvmArgs "-javaagent:${lombok}=ECJ" 
} 

私は、解像度がconfiguraiton段階で早期に十分働いていたことに驚きましたが、それはありません。

関連する問題