gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:57:38 25 4
gpt4 key购买 nike

我面前有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com