Grails BuildConfig.groovy,build、compile和runtime之间的区别是什么?

64

BuildConfig.groovy (1.3.7) 中,buildruntimecompile 有什么区别?

grails.project.dependency.resolution = {

    plugins {
        build "acme:acme-cache:latest.integration"
    }

    dependencies {
        build "com.foo.bar:foobar:1.0.5"       
        runtime "org.apache.httpcomponents:httpclient:4.0.3"
        compile("com.thoughtworks.xstream:xstream:1.3.1")
    }
}
4个回答

103
  • build - 只在构建过程中需要的依赖项
  • runtime - 运行应用程序所需的依赖项,但不需要编译它,例如特定数据库供应商的JDBC实现。通常在编译时不需要此类依赖项,因为代码只依赖于JDBC API,而不是具体的实现
  • compile - 在编译和运行时都需要的依赖项,这是最常见的情况

还有一些其他的依赖范围:

  • test - 仅测试时需要的依赖项,例如模拟/测试库
  • provided - 在编译时需要的依赖项,但不应该打包到应用程序中(通常是因为容器提供了它)。 Servlet API就是一个例子

1
谢谢,唐,信息很有用。我还有一个快速问题……build 的约定似乎遵循 "groupId:artifactId:repository or version",运行时和编译也是这样吗? - raffian
是的,所有作用域都使用相同的约定。我从来不使用“repository” - 我甚至不知道它的存在,所以在我的情况下,我指定“groupId:artifactId:version”。 - Dónal
我们正在使用Artifactory来存储所有的构件,这就是为什么我提到它的原因...再次感谢! - raffian
2
@RaffiM,你可以在 BuildConfig.groovyrepositories 部分中配置仓库,以避免为每个依赖项都进行配置。 - Dónal

5

看起来前两个答案在编译和构建之间的区别上存在冲突。我认为,构建是包括 grails compilegrails run-app 的范围,而编译只是前者。


3

1
一些 Grails 命令可以帮助说明它们之间的区别。考虑 grails run-appgrails compilegrails compile 是编译步骤,将包括编译时依赖项。 grails run-app 是运行步骤,将包括运行时依赖项。构建依赖项是您可能需要运行任何这些命令的任何内容,例如钩入某些构建事件的自定义脚本。
因此,当您需要确保包含依赖项时,请选择最适合您的命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接