Xel*_*ian 95 configuration dependencies gradle
我的问题有点普遍,但它也与Gradle有关.
为什么我们需要编译和运行时配置?
当我编译一些东西时,我需要工件来转换我的字节码中的java类,所以我需要编译配置,但为什么需要运行时配置我还需要别的东西在JVM中运行我的应用程序?
对不起,如果它听起来很愚蠢,但我不明白.
Pet*_*ser 141
在最常见的情况下,编译时所需的工件是运行时所需的工件的子集.例如,假设一个名为app
use 的程序使用库foo
,而库foo
内部使用库bar
.然后只foo
需要编译app
,但两者foo
并bar
都需要运行它.这就是为什么默认情况下,你把摇篮的一切compile
配置也可见它的runtime
配置,但相反的是不正确的.
Kno*_*ads 20
根据最新的 gradle 版本更新答案。
\n来自 gradle 的官方文档,链接如下:
\nhttps://docs.gradle.org/current/userguide/upgrading_version_5.html
\n\n\n弃用
\n不应再使用编译和运行时配置来声明依赖关系自 Gradle 3.4 起,不鼓励在 Java 生态系统插件中使用编译和运行时配置。
\n应该使用implementation、api、compileOnly 和runtimeOnly 配置来声明依赖项,并使用compileClasspath 和\nruntimeClasspath 配置来解决依赖项。
\n
更重要的是,在最近发布的 Gradle 7.0 版本中已经删除了编译依赖配置。
\n如果您尝试在 Gradle 3.4+ 项目中使用编译,您\xe2\x80\x99将收到如下警告:
\n\n\n此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。使用 \xe2\x80\x98\xe2\x80\x93warning-mode all\xe2\x80\x99 显示单个弃用警告。
\n
对于依赖项,您应该始终使用实现而不是编译,并使用 runtimeOnly 而不是运行时。
\n什么是实现依赖?
\n当您\xe2\x80\x99构建和运行Java项目时,涉及两个类路径:
\n编译类路径\xe2\x80\x93 JDK 能够将 Java 代码编译为 .class 文件所需的依赖项。
\n运行时类路径\xe2\x80\x93 实际运行已编译的 Java 代码所需的依赖项。
\n当我们\xe2\x80\x99配置Gradle依赖项时,我们\xe2\x80\x99真正做的就是配置哪些依赖项应该出现在哪个类路径上。鉴于只有两个类路径,我们有三个选项来声明我们的依赖项是有意义的。
\n\n\n如果您需要编译和运行时类路径上的依赖项,请使用实现依赖项配置。如果不是,\n请考虑compileOnly 或runtimeOnly。
\n
归档时间: |
|
查看次数: |
45487 次 |
最近记录: |