如何解决Java 平台插件不使用所有依赖项 介绍示例和问题:问题
介绍
以下情况:
我正在处理使用 Gradle 构建系统构建的多个相关 Java 项目。
我想通过 gradle 的 java 平台插件和由此产生的 BOM(物料清单)解决几个依赖项。
示例和问题:
在下面的示例中,平台 BOM 有一个 build.gradle
,用作所有项目的依赖项解析器。此 BOM 中有两个约束:一个用于名为 foo
的实现依赖项,另一个用于名为 bar
的编译依赖项。
// build.gradle for BOM "my-utility-bom"
// ...
dependencies {
constraints {
api("some.implementation.dependency:foo:3.4.1")
api("some.compile.dependency:bar:1.2.0")
}
}
// ...
然后通过将 platform 关键字应用于给定的 bom 项目,在项目中使用这两个依赖项。因为我想使用 bom 中的两个约束作为依赖项,所以我在平台项目上使用 implementation
并以相同的方式使用 compileOnly
。
// build.gradle for java project
//...
dependencies {
implementation(platform(project(":my-utility-bom")))
compileOnly(platform(project(":my-utility-bom")))
implementation("some.implementation.dependency:foo")
compileOnly("some.compile.dependency:bar")
}
// ...
之后,所有依赖项都被拉入为 implementation
依赖项和 compileOnly
依赖项。但我只想将一个依赖作为 implementation
依赖,另一个作为 compileOnly
依赖。
问题
是否可以只将特定的依赖项拉为 implementation
或 compileOnly
依赖项而不使用单独的 BOM 来进行编译和实现依赖项?
解决方法
我尝试了一个与您类似的示例,并且依赖项已按预期解决。
在您运行 gradle dependencies
时的情况:
- 实施配置将仅导入
some.implementation.dependency:foo
- compileOnly 配置将导入
some.compile.dependency:bar
然后这将在
中解决-
compileClasspath
导入已解析的依赖项some.implementation.dependency:foo:3.4.1
和some.compile.dependency:bar:1.2.0
-
runtimeClasspath
将仅导入some.implementation.dependency:foo:3.4.1
我会说你的配置是正确的。如果您的依赖关系树另有说明,那么您的示例中可能还以某种方式应用了依赖项。查看您的实际案例会有所帮助。注意我使用了 Gradle 7.0。在此存储库中 there is whole example。
这 graph helped 我了解如何解决不同的配置
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。