找不到Gradle buildscript依赖项

时间:2016-09-11 17:09:41

标签: gradle dependencies

请注意,通过解决具体问题可以部分回答这个问题,但也理解解决一般问题。

具体问题

我需要将命令行选项传递给Gradle代码。 Gradle没有任何明智的方法可以做到这一点,所以我需要以某种方式从System属性中提取它们,然后解析它们。我试图使用org.apache.common.cli包。但我无法将其导入构建代码。

这大致如下:

buildscript {
    repositories { ... }
    dependencies {
        classpath group: "commons-cli", name: "commons-cli", version: "1.2"
    }
}
...
org.apache.commons.cli.DefaultParser

我得到了这个:

* What went wrong:
Could not compile build file 'somewhere/build.gradle'.
> startup failed:
  build file 'somewhere/build.gradle': 35: unable to resolve class org.apache.commons.cli.DefaultParser
   @ line 35, column 1.
     import org.apache.commons.cli.DefaultParser

我不知道出了什么问题或者如何调试它。我也试过Groovy的groovy.util.CliBuilder,但这会打破更加神秘的错误。

因此,要解决我的直接问题:我很乐意找到一种简单的方法来解析传递给Gradle构建的命令行参数。

通用问题

有没有办法调试Gradle代码?通过调试我并不意味着在它的命令行选项中附加--debug参数。它只是打印了大量无关紧要的废话,但却没有告诉你它想要做什么以及出了什么问题。我的意思是像一个实际的调试器。

有没有办法知道它试图加载哪些依赖项,并且它是否成功加载它们,如果是这样,它从哪里加载它们?

有没有办法翻译" Gradle语言"进入可以通过linter / editor s.t.分析的东西。一个人会知道它的哪些部分/是否有意义添加某种类型的其他部分(我的意思是某种智能感知来解决诸如未满足的依赖关系更容易理解问题)?

1 个答案:

答案 0 :(得分:1)

这篇文章提出了几个问题并且非常主观(re:“没有任何合理的方式”)。我会尽我所能。

首先,作为buildscript的健全性检查,让我们试试Apache Commons Lang3:

import org.apache.commons.lang3.StringUtils

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
    }
}

println "TRACER : " + StringUtils.class.simpleName

上面的脚本可以工作,但是使用Gradle 2.14.1,我可以确认来自Apache Commons CLI 1.3.1的DefaultParser(除此之外,它不在v 1.2中)不起作用。我怀疑这与this bug有关。该链接提到了dom4j,但可能cli属于同一类别。

关于命令行参数,Gradle文档包含使用-P-Dgradle.properties等的示例。如果您有特定的解析问题,请创建一个包含细节的新问题。

关于依赖关系,可以使用以下命令:

gradle dependencies
gradle buildEnvironment

请参阅后者this post