Ted*_*eid 34 dependencies hadoop jar gradle
我正在使用Gradle帮助自动执行Hadoop任务.在调用Hadoop时,我需要能够将路径传递给我的代码所依赖的一些jar,以便Hadoop可以在map/reduce阶段发送该依赖项.
我发现了一些有用的东西,但它感觉很乱,我想知道是否有某个功能我在某处丢失了.
这是我的gradle脚本的简化版本,它依赖于solr 3.5.0 jar,以及一个findSolrJar
遍历配置中所有jar文件的任务,以找到正确的:
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'}
}
Run Code Online (Sandbox Code Playgroud)
运行这个给我这样的输出:
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
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
Pet*_*ser 28
例如,您的代码可以简化一些project.configurations.compile.find { it.name.startsWith("solr-solrj-") }
.
Tim*_*mur 25
您还可以为工件创建专用配置,以保持其清洁; 并且asPath
如果它可以返回多个位置的事实适用于您的用例(如果它在几个位置解析相同的jar,则会发生):
configurations {
solr
}
dependencies {
solr 'org.apache.solr:solr-solrj:3.5.0'
}
task findSolrJars() {
println configurations.solr.asPath
}
Run Code Online (Sandbox Code Playgroud)
为避免复制粘贴,如果您在compile
配置中也需要该jar ,您可以将此专用配置添加到compile
一个,例如:
dependencies {
solr 'org.apache.solr:solr-solrj:3.5.0'
compile configurations.solr.dependencies
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15817 次 |
最近记录: |