我有一个奇怪的问题,我不知道是什么问题。
我有一个多模块java maven项目,其结构如下:
+ A (parent)
+-+-B
| +--C
| +--D
我在父pom(A)中添加了一个依赖项:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
</exclusion>
</exclusions>
</dependency>
注:除
在模块C和D中,有必要使用版本2.3.0,因此我使用此依赖项重写父pom A的版本1.8.5:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
</exclusion>
</exclusions>
</dependency>
我在模块C和D的pom中添加了这个依赖项。C也是D的依赖项。所以当我尝试构建项目时,我得到以下错误:
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for org.quartz-scheduler:quartz:1.8.5 paths to dependency are:
+-de.xxx.xxx.xxx:module-D:6.40.1-jat-SNAPSHOT
+-de.xxx.xxx.xxx:module-C:6.40.1-jat-SNAPSHOT
+-org.quartz-scheduler:quartz:1.8.5
and
+-de.xxx.xxx.xxx:module-D:6.40.1-jat-SNAPSHOT
+-org.quartz-scheduler:quartz:2.3.0
因此,maven认为模块C的quartz版本是1.8.5,但我在模块C的pom中明确地将版本设置为2.3.0
同样,当我在模块C的目录中运行mvn dependency:tree-Dverbose时,它似乎是正确的:[信息]-org。quartz调度器:quartz:jar:2.3.0:编译
有人知道吗?
检查模块C的依赖关系层次结构并排除版本1.8.5(对于像eclipse这样的现代IDE,这应该很容易)。或者,您可以从父pom中删除此依赖项,在依赖项管理中使用它,并在子模块中指示要使用的版本。父pom中的依赖项将由所有子项继承。
模块A(父模块)的包装类型必须为pom。
一般来说,在父POM中声明依赖关系是一个坏主意,因为它强制所有子模块都具有这些特定的依赖关系,无论它们是否需要。这相当于在每个子模块中声明这些依赖关系。
当模块C和D投入使用时,您就有了具有冲突版本的重复依赖关系声明。
相反,模块A应使用<代码>
换句话说:
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
</dependencyManagement>
然后,模块C和D中的quartz依赖项声明将简单地覆盖父级A中指定的版本。
依赖于托管quartz库的其他模块仍需要显式声明它:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
其中version
和排除
将从托管依赖声明中获取。
[错误]无法解析插件org.apache.cxf:cxf-java2ws-plugin:2.4.3-fuse-01-02或其依赖项之一:未能读取org.apache.cxf:cxf-java2ws-plugin:jar:2.4.3-fuse-01-02:无法在central(http://repo.maven.apache.org/maven2)中找到org.apache.cxf:cxf-java
我在尝试使用“create”创建WebClient实例的线路上收到一个NoClassDefFoundError。尝试了builder(),但仍然是一样的。 请告诉我添加的依赖项有什么问题,以及如何解决这个问题。 我添加的依赖项是 StackTrace:
我试图使用来自Java的Apache Beam作为某种数据管道。我写了一个简单的类,从谷歌Pubsub和下沉到谷歌Bigquery,但我不能让它为我的生活构建。我使用Maven构建并添加了我能找到的所有Beam包,但我仍然得到“未找到类文件”的错误。 具体来说: 有人知道我需要添加哪些包来解决这些问题吗?不幸的是,谷歌没有提供帮助。 我的POM文件是基于Apache为Wordcount提供的示例P
为"mvn清洁验证"获取此错误。这个问题和https://github.com/googleapis/java-storage/issues/133?有人能帮忙解决吗?我没有改变pom.xml. [错误]未能执行目标org.apache.maven.plugins: maven-uderse-plugin: 3.0.0-M3:在项目hazelcast-分发上执行(执行工具):一些执行规则已经失败。
我有两个Spring Boot项目,并希望使用其中一个作为MAVEN依赖在其他。 项目刮板取决于数据库项目 项目数据库包含数据库层(实体和DAO在此构建和测试) 在数据库项目中,我必须重写Hibernate版本,并按照选项2中https://spring.io/blog/2016/04/13/overriding-dependency-versions-with-spring-boot描述。 这很
这里有几个关于Stackoverflow的问题,关于Kotlin编译器警告,当不同版本的Kotlin JAR在类路径中混合时。 这个问题是一个不同的问题,涉及到使用静态编程语言开发Gradle插件时的情况。当您至少有以下一项: 插件应用 plugin被应用 添加了依赖项 添加了依赖项 你有静态编程语言插件,如,例如: 你会出名的: 静态编程语言1.3.72是Gradle 6.7的嵌入式版本,静态编