我正在使用 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'}
}
运行它给我这样的输出:
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
有更好的方法吗?
最佳答案
您的代码可以稍微简化,例如 project.configurations.compile.find { it.name.startsWith("solr-solrj-") }
。
关于jar - Gradle 中获取 gradle 依赖项缓存中 jar 文件路径的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577929/