Gradle中的Maven BOM依赖关系 - java

鉴于在Maven项目Foo的依赖管理中列出了一个BOM,如下所示:

<groupId>someGroup</groupId>
<artifactId>someArtifact-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>

但是此BOM仅对子模块中的测试依赖项起作用。

<dependency>
    <groupId>someGroup</groupId>
    <artifactId>someArtifact</artifactId>
    <scope>test</scope>
</dependency>

在BOM表和BOM表中声明的工件只能通过声明其他存储库来使用。

如果我创建一个新的Maven项目并声明对Foo的依赖关系,它将得到解决。

万一我在Groovy项目中定义了对Foo的完全相同的依赖关系

repositories {
  mavenCentral()
}

dependencies {
  implementation("myOrg:Foo:1.0")
}

解决失败,并

- Could not resolve myOrg:Foo-parent:1.0.
  - Could not parse POM <mvn-central>/myOrg/Foo-parent-1.0.pom:
    - Could not find someGroup:someArtifact-bom:1.0-SNAPSHOT.

...因为它在中央不存在。

当然,可以通过添加存储库(如果可以从用户项目访问)或将BOM及其声明的工件放在中央来轻松解决。

我想知道是否还有其他方法无法避免将来发生此问题。依赖项定义上的排除不适用于BOM。我可以理解这种行为,因为BOM不是真正的模块。

仅出于完整性考虑:经过正确的解决,我的项​​目中与BOM或其工件无关。确实根本不需要它。

参考方案

完整来说,您对Gradle的体验对我来说就像是预期的行为。

Gradle不会动态添加依赖项定义的存储库。这是因为它可能会带来安全隐患,在此情况下,添加的存储库可能会试图掩盖带有中毒伪像的流行软件包。
因此,在Gradle中正确的解决方案是在需要时添加额外的存储库。

随着Gradle解释BOM和加载Maven POM文件的方式发生了许多变化,很可能是因为不需要BOM,所以最新的Gradle版本会很乐意忽略它。

但是根本问题是,通过任意添加Gradle版本来过渡性地添加随机存储库。

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

在集成测试阶段执行Maven模块 - java

我想启动一个同级Maven 3模块,该模块在我的一个Maven模块中充当应用程序服务器,以对系统运行集成测试。我的maven项目看起来与此类似:父模块模块A模块B现在,我想在Maven的集成前测试阶段中启动“模块A”,然后运行模块B中包含的所有集成测试。我设法在模块B中运行了集成测试,但是没有找到“光滑”的方法在集成前测试阶段启动模块B。最佳做法是什么?使用…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

在Maven构建之前如何运行课程? - java

为什么以下原因导致构建失败?我创建了一个应该在maven开始执行构建之前运行的类。 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.…

Java Applet的URLConnection与PHP无效 - java

我已经研究了Oracle文档和示例,但仍然无法正常工作。我有一个Java Applet,它只是尝试使用URLConnection和OutputStreamWriter通过POST将文本字段发送到PHP脚本。 Java方面似乎工作正常,没有引发异常,但是PHP在我的页面上未显示任何输出。我是PHP新手,因此请耐心等待。这是相关的Java部分: try { UR…