Gradle有哪些配置?

时间:2014-09-03 13:39:05

标签: eclipse groovy gradle

在gradle中使用依赖项解析时,通常会看到如下内容:

configurations {
    optional
    compile
    runtime.extendsFrom compile
    testCompile.extendsFrom runtime
}

我想知道optionalcompile的类型是什么?是班级吗?一个字符串?我可以用什么方法打电话呢?


除此之外,有没有办法自动找出这些东西,类似于ctrl+space在日食时的东西?

3 个答案:

答案 0 :(得分:3)

我不是Gradle专家,但这似乎是一个简单的getter以DSL方式委托给另一个对象。你可以写这样的东西:

class MyDsl {
  def config = [:].withDefault { false }
  void configure(closure) {
    closure.delegate = this
    closure()
  }

  def getOptional() { config.optional = true }
  def getCompile() { config.compile = true }
  def getTest() { config.test = true }
}

dsl = new MyDsl()

dsl.configure {
  optional
  compile
}

dsl.config.with {
  assert optional
  assert compile
  assert !test
}

您可以返回一些特定对象以传递给runtime.extendsFrom()方法。

对于自动完成,IIRC是什么groovy-eclipse DSLD (DSL descriptors)。您可以尝试this gradle DSLD插件中的eclipse-integration-gradle

根据this ticket,很久以前就已经完成了。

答案 1 :(得分:2)

它们是实现org.gradle.api.artifacts.Configuration的类。 Gradle DSL doc还包含有关configuration DSL core type

的更多信息

要查找有关内部类等的更多信息,这在查询Gradle javadoc中的类和方法时非常有用,它通常只是打印出类名来简单。但很多时候,您最终会得到一些内部实现类而不是您感兴趣的API接口,但无论如何,这都是开始搜索内容的一种方式。我倾向于保留IDE中可用的所有开源项目的源代码。这样很容易跳进正确的类(即使它不能通过上下文快捷方式获得)并环顾四周。

要获得有关您的案例中的配置的更多信息,您可以添加一个只打印出相关信息的任务。例如。类似的东西:

task configInfo << {
    println "configurations.class: ${configurations.class}"
    println "configurations.compile class: ${configurations.compile.class}"
    println "implements ${Configuration} interface? ${configurations.compile instanceof Configuration}"
}

在我的情况下导致以下输出

$ gradle configInfo
:configInfo
configurations.class: class  org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer_Decorated
configurations.compile class: class org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated
implements interface org.gradle.api.artifacts.Configuration interface? true

答案 2 :(得分:1)

“什么类型是可选的或编译”这个问题并不真正有效。这有点像询问“instanceof”具有什么类型。 keywword的instanceof没有类型。

在编写您所引用的代码时,您正在利用DSL。将compileoptional等字词视为该DSL中的关键字。除非您正在编写自己的DSL(而不是利用现有的DSL,这就是这个问题所针对的),所以不要认为类型与这些事物有关。

关于ctrl+space的问题,除非你使用的是一个支持它的插件,否则Eclipse在这个上下文中不会做任何特别的事情。即使有插件支持,仍然会有限制,因为您可以定义自己的配置。如果您要定义名为“jeffrey”的配置并键入“jeff”后跟ctrl+space,则IDE无法知道您是否希望将其转换为“jeffrey”。

我希望有所帮助。