首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle中获取gradle依赖项缓存中jar文件路径的最简洁方法

Gradle中获取gradle依赖项缓存中jar文件路径的最简洁方法
EN

Stack Overflow用户
提问于 2012-03-06 12:33:07
回答 5查看 20.6K关注 0票数 42

我正在使用Gradle帮助自动执行Hadoop任务。在调用Hadoop时,我需要能够将我的代码所依赖的某些jars的路径传递给它,以便Hadoop可以在map/reduce阶段发送依赖项。

我已经找到了一些可以工作的东西,但感觉很混乱,我想知道是不是有什么地方遗漏了什么功能。

这是我的gradle脚本的一个简化版本,它依赖于Solr3.5.0JAR,还有一个findSolrJar任务,它迭代配置中的所有jar文件以找到正确的jar文件:

代码语言:javascript
复制
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'}
}

运行这个命令会得到如下输出:

代码语言:javascript
复制
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

有没有更好的方法来做这件事?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-06 16:28:27

您的代码可以简化一点,例如project.configurations.compile.find { it.name.startsWith("solr-solrj-") }

票数 33
EN

Stack Overflow用户

发布于 2013-09-24 20:26:44

您还可以为工件创建专用的配置,以保持其整洁;如果asPath可以潜在地返回多个位置,这一事实适用于您的用例(如果它在多个位置解析相同的jar,则会发生这种情况),则可以使用它:

代码语言:javascript
复制
configurations {
  solr
}

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

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

为了避免复制粘贴,如果您还需要compile配置中的jar,您可以将此专用配置添加到compile one中,如下所示:

代码语言:javascript
复制
dependencies {
  solr 'org.apache.solr:solr-solrj:3.5.0'
  compile configurations.solr.dependencies
}
票数 31
EN

Stack Overflow用户

发布于 2016-08-26 12:49:56

我需要lombok.jar作为gwt构建的java构建标志,这很有效!

代码语言:javascript
复制
configurations { 
 lombok
}
dependencies {
  lombok 'org.projectlombok:lombok+'
} 
ext {
   lombok = configurations.lombok.asPath
}

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

我很惊讶这个解决方案在配置阶段起到了足够早的作用,但它确实起到了作用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9577929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档