运行时和编译组之间的区别

时间:2014-10-20 16:46:35

标签: gradle

在gradle构建脚本中,我有以下代码:

dependencies {
   runtime group: 'org.springframework', name: 'spring-core', version: '4.1.1'
}

并且它工作正常,但如果我将其更改为

dependencies {
    compile group: 'org.springframework', name: 'spring-core', version: '4.1.1'
}

gradle build

期间会抛出异常
Could not resolve all dependencies for configuration ':compile'.
> Could not find org.springframework:spring-core:4.1.1.
  Searched in the following locations:
      https://repo1.maven.org/maven2/org/springframework/spring-core/4.1.1/sprin
g-core-4.1.1.pom
      https://repo1.maven.org/maven2/org/springframework/spring-core/4.1.1/sprin
g-core-4.1.1.jar

我认为工件在编译和运行时都在同一个地方搜索。它们之间有什么区别?

1 个答案:

答案 0 :(得分:3)

Gradle在执行编译之前解析compile个依赖项,期望源代码直接引用该工件。但是,它直到构建过程的后期才解析runtime依赖项。 (请参阅@Dónal关于在compileruntime之间进行选择的使用指南的答案)

因此,两种情况之间的差异很可能是您的build任务需要编译,而不是运行时准备。使用原始配置,任何需要运行时准备的任务都将失败并出现相同的错误。

要修复此特定案例中的失败,建议您将version值从4.1.1(不在您引用的Maven存储库中)更改为{{1 (是)。