问题标签 [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 回答
314 浏览

maven - 为什么包括 bom 不起作用?

我发现一些我期望工作的东西不起作用。

org.glassfish.jersey:jersey-bom我在我的dependencyManagement部分中导入了。

pom显然包括以下依赖项。

现在我添加自己的依赖项

mvn抱怨。

org.glassfish.jersey.core:jersey-common:jar 的“dependencies.dependency.version”缺失。@ 第 33 行,第 17 列

我的pom怎么了?

0 投票
4 回答
8466 浏览

maven - 我可以使用 Gradle maven 插件创建仅 Maven POM (BOM) 构建以部署到 Nexus 吗?

我有一个 Gradle 项目,它使用Spring 的依赖管理插件来定义依赖版本列表。我还使用Maven 插件将项目部署到 Maven 存储库。

我希望能够将其部署为 Maven 物料清单 (BOM),以便我可以在其他 Gradle 项目中使用它来定义我的依赖版本。只要我还部署了一个 JAR 文件,我就可以让它工作。但是,JAR 完全是空的和多余的。我的目标是只生成和部署 POM 文件,如果这是一个带有“pom”包装的 Maven 项目,我将能够做到这一点。

如果我从要发布的工件列表中手动排除 JAR,则不会安装任何内容,甚至不会安装 POM 文件。

这是演示该问题的测试版本:

以上正确生成以下 POM 文件并将其安装到我的本地 Maven 存储库中:

但是,它还会安装一个空的 JAR 文件,以保存 MANIFEST.MF 文件。

我能够使用maven-publish插件成功地完成这项工作。但是,我还使用Gradle Sonatype Nexus 插件将工件发布到 Nexus 实例。由于它建立在maven插件之上,因此该maven-publish插件无法满足我的需求。以下是我需要添加的所有内容以使其与maven-publish插件一起使用:

有没有办法只使用mavenGradle 插件生成和部署 POM 文件,就像我可以做的那样,如果这是一个带有“pom”包装的 Maven 项目?

0 投票
0 回答
111 浏览

maven - 如何包含 BOM(物料清单)作为父 pom 的子级

根据 Maven 文档,BOM 应该是父项目的父项目。但是,我通过将 BOM 包含为父项目的子 pom 来遵循Resteasy所做的事情。

由于父 pom 需要使用 version 声明所有依赖项,我想找到一种方法,以便我能够从 parent-pom 中删除所有依赖项并将其放在我的 BOM 中

0 投票
0 回答
130 浏览

maven - Maven的依赖类型是否扩展为类型+分类器?

对依赖项中可能的分类器和类型列表的后续问题。Maven 参考指南中接受的答案点

type:对应于依赖工件的包装类型。这默认为 jar。虽然它通常表示依赖项文件名的扩展名,但并非总是如此。一个类型可以映射到不同的扩展和分类器。类型通常与使用的包装相对应,但也并非总是如此。一些示例是 jar、ejb-client 和 test-jar。新类型可以由将 extensions 设置为 true 的插件定义,因此这不是一个完整的列表。

在实践中,这意味着像这样的依赖

对应于名为 my-lib-1.0.1-tests.jar 的文件。

我的问题是我是否可以将依赖项定义为

因为这本质上就是它扩展的内容。

这对我来说是个问题,因为我正在尝试为项目生成一个 bom 文件。这意味着我将创建一个dependencyManagement 部分,列出其他项目可以使用的所有jar(等)。但是为了创造我的bom

  • 将项目部署到本地仓库
  • 解析该目录以确定产生了哪些依赖项

结果,我只能访问扩展类型和分类器。

0 投票
0 回答
307 浏览

java - Maven:如何验证 BOM 是否有效?

如果我有一个 Maven 的 BOM(物料清单)存储在其自己的单独存储库中,我如何验证该文件是否有效?例如,列出的依赖项应该对应于 Artifactory(或任何二进制服务器)中的有效依赖项,并且版本应该是有效版本。BOM 不应该要求不存在的版本。

我考虑创建一个空白的 Maven 项目并将 BOM 附加为该项目的 POM 文件,因为当您运行 Maven 安装时,它应该从指定的服务器获取依赖项,并在此过程中检查这些依赖项是否存在。但是,运行该命令并没有做任何事情——它只是说 Build Succeeded,即使我输入了无效版本(即 v100000000000)。

0 投票
2 回答
10946 浏览

maven - 导入 BOM pom 时如何覆盖 Spring Boot 中的版本号?

如何覆盖 Spring Boot 导入的版本号,而不在依赖项管理部分手动设置每个工件?

但是,当我跑步时

输出

那定义2.8.10的价值在哪里。jackson.versionorg.springframework.boot:spring-boot-dependencies:1.5.7.RELEASE:pom

但是,如果我明确添加

到我的依赖管理部分,然后它正确解析为:

这很令人困惑,因为这似乎应该相当于执行 an importofcom.fasterxml.jackson:jackson-bom:2.9.1:pom应该相当于将该代码的内容手动粘贴到其中。

我什至试过

但没有效果。


PS - 重要的是,我使用的 Maven 是:

0 投票
1 回答
853 浏览

maven - Maven:pin 依赖版本,其中依赖由 BOM 管理

我们使用Maven BOM来管理一套库的依赖关系。BOM 的dependencyManagement 部分通常使用版本范围来指定这些库的版本,例如,[2.0,2.1)使用BOM 的Child pom.xml 不指定这些托管依赖项的版本。(编辑澄清:我们对第三方依赖项使用特定版本,范围用于正在开发的内部库,其中版本可以快速更改。我们定义版本范围以确保这些库之间的广泛兼容性,即都在同一个主要版本。)

(请注意,这不是一个多模块项目。使用 BOM 机制的库和服务项目只是将其声明为父级并从 Nexus 存储库中提取它。它们不是一起构建的。)

我们还有一些构建系统脚本,它们使用versions:resolve-ranges来固定出现在我们的库和服务pom.xml(不是BOM 的pom.xml)中的依赖项的版本。这些具有已解析范围的 pom.xml 被签入到源代码管理并标记,因此如果我们需要将部署回滚到早期版本,我们可以使用该标记的 pom.xml 来构建使用相同依赖项版本的构建原始构建,即使现在可以使用较新版本的依赖项(因此resolve-ranges如果我们重新运行它会提供较新版本)。

我刚刚注意到这两种机制不能很好地协同工作。在库或服务 pom.xml 上运行versions:resolve-ranges仅解析该 pom.xml 中的范围。依赖管理下的版本仍未指定,所以如果我们使用这个 pom.xml 进行新构建,我们将在构建时获得范围内的最新依赖版本。不是我们想要的!

有没有办法使用versions:resolve-ranges(或任何其他插件或技术)来解析托管版本并将它们粘贴到子 pom.xml 中?

这是一个人为的例子。

物料清单:

使用 BOM 的子项目(一个托管依赖项,一个非托管):

mvn dependency:tree显示依赖项的有效版本的片段:

[信息] com.maventest:mytest:jar:1.0-SNAPSHOT

[信息] +- commons-lang:commons-lang:jar:2.3:compile

[信息] \- junit:junit:jar:3.8.2-brew:test

mytest pom.xml 之后的依赖部分mvn versions:resolve-ranges

因此,正如预期的那样,解决了非托管依赖项。但托管的不是。我怎样才能让它也得到解决?

0 投票
1 回答
185 浏览

maven - 在配置文件中使用不同的 JBoss BOM

我有一个关于 JBoss 和 WildFly 的 BOM 用法的一般性问题。是否可以使用不同的配置文件为 JBoss 7 和 WildFly 10 构建项目?

我试图将 BOM 定义从 WildFly 复制到这样的配置文件中:

当然是使用 JBoss7 配置文件。

但是这样它就不会将重要的库添加到 lib 文件夹中,即这个定义是在一个 ear pom 中,一个子项目(war)添加了 json 依赖项。如果没有配置文件,maven 会将 json jar 添加到 lib 文件夹中,但如果我将它放在配置文件中则不会。

在我读到更改配置文件中的依赖项是一种反模式 [ 1 ] 之后,我想知道如何为 JBoss7 和 WildFly 10 构建我的项目。

更新

好吧,抱歉这个问题的快速拍摄。这里有更多细节。

项目结构:

deployment构建整个耳朵的项目也是如此,它包含myapp一个网络应用程序和core一个库。对和tomyapp有依赖关系。corecorejson

为了获得所有需要的依赖项,我wildfly-javaee7-with-tools在依赖项管理中包含了正确的版本。也是其中json定义的版本。该core项目将json库作为正常依赖项。

在这一点上,这应该是相当标准的。但问题是我希望能够为 JBoss 7 和 WildFly 10 构建,因为我必须改变

当然${version.jboss.bom}会从10.1.0.FinalWildFly 更改1.0.7.Final为 JBoss。

为了做到这一点,我试图wildfly-javaee7-with-tools进入个人资料。我的第一个猜测是只将此依赖项移动到配置文件中。但后来这个json罐子没有被包括在内。之后我也尝试json像上面那样移动。

0 投票
3 回答
1218 浏览

spring-boot - Gradle:Spring Boot 依赖管理插件中的访问版本声明

我有 spring boot 项目,我尝试使用spring boot 依赖管理插件来使用提供的依赖版本。

该插件“模拟” mavens BOM 行为,这意味着它以某种方式从 maven 父项目中检索库的版本(我不确定这是如何实现的,但通常版本来自pom.xml)。它确实具有jackson.version用于设置com.fasterxml.jackson.dataformat组内工件的版本的属性。

我的项目使用来自同一组的工件,但它不包含在 BOM ( jackson-dataformat-yaml) 中,但我想使用相同的 jackson 版本。

我尝试像这样添加编译依赖项:

但构建失败:

无法为 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象获取未知属性“jackson”。

问:有没有办法进入该物业?或者我还能如何重用 lib 版本?

更新 我不确定为什么我不从一开始就尝试这个,但它有效:

但是我不知道为什么会这样(工件没有在任何地方声明)。

0 投票
1 回答
675 浏览

gradle - 如何发布 gradle 生成的 BOM

我有这个配置,但是发布没有找到任何事情要做,我必须添加/更改什么才能使这个 BOM 正确发布?(它似乎确实生成build/pom.xml正确)

使用gradle 4.3