java - Gradle 中“提供”的依赖项

标签 java gradle dependency-management

我面前有build.gradle,并且有一些依赖项声明为provided,但在 documentation 中我没有看到这个依赖范围。

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE")
    ....

    provided 'backport-util-concurrent:backport-util-concurrent:3.1'
    provided 'org.javolution:javolution:5.5.1@jar
    ....
}

这是由插件提供的吗?如果是这样我如何找出它属于哪个插件?

Gradle 中的 providedruntime 依赖范围有什么区别?

最佳答案

What is provided scope?

假设需要一个 jar 来编译您的代码,但该 jar 存在于生产环境库集合中。那么你就不需要将 jar 与你的项目文件一起打包。为了支持这一要求,Maven 有一个名为 provided 的作用域。如果您将任何 jar 依赖项声明为 provided,那么该 jar 将在编译期间出现在您的类路径中,但不会与您的项目存档一起打包。

provided 范围非常有用,特别是在 Web 应用程序中。例如,您的类路径中需要存在 servlet-api.jar 才能编译您的项目,但不需要它来打包 servlet-api.jar 文件与你的 war 。通过提供范围,可以实现这一要求。

Gradle java 插件中没有定义名为 provided 的范围。也不在 warandroid 插件中。如果您想在项目中使用 provided 范围,则必须在 build.gradle 文件中定义它。以下是在 gradle 中声明 provided 范围的代码片段:

configurations {
    provided
}

sourceSets {
    main { compileClasspath += configurations.provided }
}

现在,你的第二个问题:

What is the difference between provided and runtime dependency scope in Gradle?

为了首先回答这个问题,我将定义compile依赖项。 compile 依赖项是依赖项,它们是编译代码所必需的。现在想象一下,如果您的代码使用名为 X 的库,那么您必须将 X 声明为编译时依赖项。另请想象 X 在内部使用另一个库 Y,并且您将 Y 声明为运行时依赖项。

在编译期间,Gradle 会将 X 添加到您的类路径中,但不会添加 Y。因为编译不需要Y。但它会将 XY 与您的项目存档一起打包,因为 XY 都是运行您的项目所必需的。生产环境中的项目存档。一般来说,生产环境中需要的所有依赖项都称为运行时依赖项。

在Gradle官方documentation ,它说运行时依赖项是“生产类在运行时所需的依赖项。默认情况下,还包括编译时依赖项。” .

现在,如果您已经读到这里,那么您已经知道 provided 是一个 compile 依赖项,我们不希望它出现在 >运行时依赖项(基本上,我们不希望它与项目存档一起打包)。

以下是提供运行时范围的说明。这里,compile指的是编译项目需要的依赖,non-compile指的是项目编译不需要的依赖。

关于java - Gradle 中“提供”的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066952/

相关文章:

java - JDBC 删除条件语句

android - 添加 facebook sdk 后重复条目 : com/google/android/gms/internal/zzaa. 类

java - 在 Java 中使用类依赖关系构建图形的工具

configuration - 所有配置对项目的 Gradle 依赖项

java - 在 Maven 中下载 Artifact 时显示详细日志

java - token 编码/解码问题 - Spring

java - 支持多线程的ArrayList

android - Android:将相同的applicationId用于多个商店是一种好习惯吗?

java - 是否可以在同一个 pom.xml 中重新确定导入的 Maven 依赖项的范围?

java - 如何访问 Apache POI 上存储在 Sharepoint(带身份验证)上的 .xlsx 文件?