我正在使用Gradle帮助自动执行Hadoop任务。在调用Hadoop时,我需要能够将我的代码所依赖的某些jars的路径传递给它,以便Hadoop可以在map/reduce阶段发送依赖项。
我已经找到了一些可以工作的东西,但感觉很混乱,我想知道是不是有什么地方遗漏了什么功能。
这是我的gradle脚本的一个简化版本,它依赖于Solr3.5.0JAR,还有一个findSolrJar任务,它迭代配置中的所有jar文件以找到正确的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有没有更好的方法来做这件事?
发布于 2012-03-06 16:28:27
您的代码可以简化一点,例如project.configurations.compile.find { it.name.startsWith("solr-solrj-") }。
发布于 2013-09-24 20:26:44
您还可以为工件创建专用的配置,以保持其整洁;如果asPath可以潜在地返回多个位置,这一事实适用于您的用例(如果它在多个位置解析相同的jar,则会发生这种情况),则可以使用它:
configurations {
solr
}
dependencies {
solr 'org.apache.solr:solr-solrj:3.5.0'
}
task findSolrJars() {
println configurations.solr.asPath
}为了避免复制粘贴,如果您还需要compile配置中的jar,您可以将此专用配置添加到compile one中,如下所示:
dependencies {
solr 'org.apache.solr:solr-solrj:3.5.0'
compile configurations.solr.dependencies
}发布于 2016-08-26 12:49:56
我需要lombok.jar作为gwt构建的java构建标志,这很有效!
configurations {
lombok
}
dependencies {
lombok 'org.projectlombok:lombok+'
}
ext {
lombok = configurations.lombok.asPath
}
compileGwt {
jvmArgs "-javaagent:${lombok}=ECJ"
}我很惊讶这个解决方案在配置阶段起到了足够早的作用,但它确实起到了作用。
https://stackoverflow.com/questions/9577929
复制相似问题