问题标签 [maven-bom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
215 浏览

java - 使用 BOM 时的传递依赖问题

假设我有
1. 一个 bom 项目(命名为 bom)
2. 一个 jar 项目(命名为 A)
3. 一个战争项目(命名为 B)

bom 项目的 jackson-data 版本在属性中为 2.8.5 和 2.8.1,在 jackson-data 的依赖管理部分 2.8.5 中。

继承 bom 的项目 A 在 2.8.1 版本中声明了 jackson-data 依赖项。

项目B依赖于项目A并继承bom。它没有在其依赖项中声明杰克逊数据

现在,当我查看项目 B 的 lib 目录时,jackson-data 版本是 2.8.5,而项目 A 将其声明为 2.8.1。

无论在依赖项中声明了什么,它都采用 bom 中声明的版本。有没有办法解决项目 B 中杰克逊数据的传递依赖关系,因为它在项目 A 中声明意味着使用 bom 时的版本是 2.8.1 而不是 2.8.5?

下面是pom


物料清单项目

项目A的pom

项目 B

0 投票
0 回答
141 浏览

kotlin - 版本控制插件。插件的BOM?

我们有大约 100 个微服务和 10 个团队来开发它们。技术栈几乎相同。当一个团队想要使用新版本的插件时,它会花一些时间将其嵌入到自己的项目中,然后再花一些时间将其嵌入到剩下的 9 个项目中。然后另一个团队想使用新版本,也花时间。我们使用共享 BOM,非常酷!但是 BOM 无法管理插件版本,所以现在团队仍在浪费时间检查插件和依赖项的兼容性。

我的研究只允许我开发以下依赖管理方法:我创建了一个自定义插件(plugin-version)。其中,我

1) 包括共享 BOM

2)创建文件版本

3)通过其他插件扩展的反射为我们的命令配置默认值。

在项目中,我创建文件夹 buildSrc,其中应用 mu 自定义插件作为依赖项。buildSrc/build.kts

并创建拐杖文件 PluginVersion.kt

在此之后,我可以在 buildSrc 中使用 PluginVersion,如 root/buildSrc

加:

  1. 这是工作
  2. 我有一个地方负责所有插件的版本、依赖项和默认值 o 插件扩展
  3. 我可以使用与我的版本插件中的版本不同的插件版本(升级/降级版本)
  4. 如果我不想进行一些自定义,我可以在 buils.kts 中配置其他插件的范围

减:

  1. 它仅适用于 Kotlin,不适用于 Groovy
  2. 它需要 buildSrc 文件夹
  3. 当我单击 module1 中的类 PluginVersion 时,我只看到代码,IDEA 不会反编译它,而且我看不到插件的当前版本。

如果有人谈论控制插件版本的更简单方法或告诉如何改进当前版本(摆脱 PluginVersion.kt 类和 buildSrc 文件夹),我会很高兴

0 投票
1 回答
384 浏览

java - Gradle`java-platform`插件:如何设置依赖项动态版本解析?

我正在尝试使用 Gradle 的插件制作 BOM(物料清单 POM)java-platform,并希望将 Gradle 的锁定功能与该插件一起使用:我希望使版本始终保持最新。

这是我build.gradle文件的一部分。

gradle.properties文件

当我执行generatePomFileForSomePublication任务时,它被翻译成以下 POM 片段:

显然,有plus迹象表明不应该出现在生成的 POM 中。这意味着,依赖解析不适用于java-platform约束。

所以问题是我怎样才能使依赖解析为这些工作constraints

0 投票
0 回答
3605 浏览

java - Gradle platform dependencies with java-library

We have a couple of common libraries, which use the java-library Gradle plugin, and depend on Micronaut via a platform dependency on it's BOM. Both projects use Gradle 6.6.1 which is the latest at the time of writing this post.

Library build.gradle

When I try to use my library in an application, which uses the application Gradle plugin and also has a platform dependency on Micronaut's BOM, I get an error saying it can't resolve the Micronaut BOM the library uses. But it will never be able to resolve that dependency because it's a BOM, not a library.

Application build.gradle

And then I get the following error.

I've attempted to read the Gradle docs regarding variant selection, but it really doesn't make much sense to me. Anyone know how I need to declare the dependencies to make this work? It seems like a pretty trivial thing, but I haven't found anything about this...

0 投票
0 回答
264 浏览

java - 如何将依赖锁定用于仅约束的 Gradle `platform`?

我有一个 Gradle (v6.6.1)平台模块,我将它发布到我们的内部 maven 存储库。这是一个仅限约束的平台,旨在供我组织中的大量项目使用,以便我们可以标准化常见依赖项的版本。

到目前为止一切正常:我定期检查每个依赖项以查找更新的版本,更新我的build.gradle.kts文件中的这些版本,增加平台本身的版本号(主要或次要,取决于更改),并将新平台发布到Maven 回购。

但是,这样做是一个耗时且手动的过程。我更愿意指定我的版本范围约束build.gradle.kts(例如,最新的补丁版本或最新的次要版本),然后使用依赖锁定将每个依赖项的推荐版本更新为新的特定版本。

问题是,Gradle 似乎禁止这样做。即使我使用以下内容,它也只会产生一个空的api.lockfile

我想我理解这背后的逻辑:我的平台只发布约束(而不是依赖),所以依赖锁定不适用。但是,我想指定确切的约束,允许消费项目在我的平台项目的发布之间跳转,并推荐给他们确切的版本。

我也明白那些消费项目可以使用依赖锁定来获得可重现的构建(他们确实这样做),但我想再次指定确切的约束,以便版本上的每个人,比如我平台的 17.4 都使用完全相同的依赖项,并且他们可以就遇到的问题进行协调。

解决方法

我的最佳想法是拥有第二个私有模块,它定义了相同的依赖项集(作为实际依赖项)但具有更广泛的版本范围(例如[1.1, 2.0),而不是1.4.3)。我可以使用该模块生成一个锁定文件,然后编写一个脚本,该脚本将使用新解决的特定依赖版本更新platform's文件。build.gradle.kts

0 投票
1 回答
973 浏览

android - 迁移到 BOM 后如何使用 maven-publish gradle 插件生成 maven pom

我在 build.gradle 中使用以下内容生成带有 maven-publish 插件的 pom:

使用依赖项时效果很好,如下所示:

但在迁移到 BOM 后不再存在:

发布时不获取版本(因此不包括依赖项):

有人知道如何使用 gradle DSL 从 BOM 中读取版本吗?或者如何生成 pom.xml 的 dependencyManagement 部分以反映 BOM?

0 投票
1 回答
39 浏览

gradle - Gradle 平台 BOM 设置版本选择性

我创建Bom 在这个 BOM 中约束了许多依赖项(例如 io.github.microutils:kotlin-logging、ch.qos.logback:logback-classic)当我将此 BOM 添加到我的应用程序并删除版本时(kotlin-logging、logback-经典)我有错误

但是对于依赖 logback-classic gradle 解析版本。

如何重现:

  1. 克隆示例项目
  2. 在模块 bom 任务中执行 publishToMavenLocal
  3. 删除版本kotlin-logging
  4. 尝试构建模块应用程序

我应该如何声明依赖而不指定版本?

0 投票
0 回答
257 浏览

spring-boot - 使用 Gradle 插件管理中的 BOM

我们使用 BOM 来共享 MyCompany 中的依赖管理。

它被定义为 Maven POM。这是一个最小的例子:

然后从 Gradle 项目中使用它。

虽然这适用于代码依赖项,但我想从插件管理中找到一种使用它的方法。

现在,我们在 中定义settings.gradle.kts

springBootVersion中定义的gradle.properties

这对我来说是个问题,因为 Spring 版本同时定义:

  • 在共享 BOM 中;
  • 在每个项目的插件管理中。

如何从 Gradle 的插件管理中访问该 BOM?如果我做不到,有什么好的不要重复自己的做法呢?

0 投票
1 回答
204 浏览

java - 如何从 gradle 子项目中发布 BOM?

我有一个多模块 gradle 构建,其中包含可重用组件项目的集合和使用公共组件的应用程序集合。

在上面的示例树结构app:api项目中可以使用components:clock项目。我想发布所有组件项目的物料清单 (BOM),以便我可以将组件移动到它自己的存储库中。

如何配置 gradle 以从子项目集合中发布 BOM?

0 投票
1 回答
43 浏览

maven - 如何在父母和孩子中使用一个 bom 而不会在多个地方复制它

我有一个父子 Maven 项目结构。我想使用一些依赖项

在父母和孩子。(如果 jar1、jar2、jar3 在上面的 bom 中,假设我想在 parent 中使用 jar1、jar2,在 child 中使用 jar3)。

因此,在这种情况下,我尝试将上面的 bom 包含在 parent 的dependencyManagementdependenciessection 中,但它似乎在 child pom.xml 中不可用。(因为,我在子项目中找不到 jar3 的版本)。

那么我应该在父项目和子项目中复制上述 bom 还是有任何解决方法?