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 范围非常有用,特别是在网络应用程序中。例如,servlet-api.jar 需要出现在您的类路径中才能编译您的项目,但您不需要它来打包 servlet-api.jar 文件与你的 war 。使用 provided 范围可以实现这一要求。

在名为 provided 的 Gradle java 插件中没有定义范围。也不在 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 dependencies 是依赖项,它们是编译代码所必需的。现在想象一下,如果您的代码使用名为 X 的库,那么您必须将 X 声明为编译时依赖项。还假设 X 在内部使用另一个库 Y,并且您将 Y 声明为您的运行时依赖项。

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

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

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

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

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

相关文章:

android - 运行应用程序失败并出现错误 'com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex'

ruby - 像 Rails 这样的多 gem Ruby 项目如何管理每个 gem 的并行开发?

java - 在布局中添加按钮时出现 java.lang.reflect.InitationTargetException

java - 使用库导入Gradle项目

gradle - javaClass.getResource (“/foo”)在IntelliJ中为null,但在gradle CLI上有效

android-studio - 需要等级版本 2.6。当前版本是 2.4

dart - 自定义 Dart 存储库?

java - Hibernate 和 Apache Felix 的依赖链冲突

java - Eclipse RCP - 在编辑器区域中打开一个 View (3.8/e4 混合)

java - @Transactional 和继承