Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven拉入POM中未指定的依赖项_Java_Maven_H2 - Fatal编程技术网

Java Maven拉入POM中未指定的依赖项

Java Maven拉入POM中未指定的依赖项,java,maven,h2,Java,Maven,H2,我有一个maven项目,由一个父POM和几个子模块组成。它在Intellij中编译并运行良好(我假设它使用的是javac,而不是Maven) 当我运行maven clean install时,由于“RequireUpperBoundDeps”,生成失败,这意味着生成期间解析的版本低于同一工件的依赖项版本。以下是(经过消毒的)输出: [INFO]——maven enforcer插件:1.4:enforce(enforce maven)@my service--- [警告]规则1:org.apach

我有一个maven项目,由一个父POM和几个子模块组成。它在Intellij中编译并运行良好(我假设它使用的是
javac
,而不是Maven)

当我运行
maven clean install
时,由于“RequireUpperBoundDeps”,生成失败,这意味着生成期间解析的版本低于同一工件的依赖项版本。以下是(经过消毒的)输出:

[INFO]——maven enforcer插件:1.4:enforce(enforce maven)@my service---
[警告]规则1:org.apache.maven.plugins.enforcer.RequireUpperBoundDeps失败,消息为:
强制RequireUpperBoundDeps时失败。错误是[
com.h2数据库需要上限依赖项错误:h2:1.3.168依赖项的路径为:
+-服务:我的服务:1.0.0-SNAPSHOT
+-com.h2数据库:h2:1.3.168
和
+-服务:我的服务:1.0.0-SNAPSHOT
+-libs:my libs:2.0.0

+-com.h2数据库:h2:1.3.168(托管)我发现
h2
依赖项是从父pom(我的服务的父项)拉进来的.
mvn依赖关系:树
具有欺骗性,因为它将
h2
显示为对
我的服务
的直接依赖关系,这在我看来意味着它应该在
我的服务
pom中声明。它在
我的服务
pom中没有被删除-但是,它是在父pom中声明的。这就是冲突的原因离子来自


使用指定版本在
我的服务
pom中声明
h2
修复了上限依赖项错误。

一般回答:只需在pom.xml中声明缺少的依赖项就可以了。

有人写了一篇优秀的文章,提供并理解了正在发生的事情和可能的解决方案。以下是总结-

对于错误中的此deps树

+-com.example.services:my-service:1.0.0-SNAPSHOT
  +-com.example.libs:my-libs:2.0.0
    +-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190

这是您必须根据您的项目做出的决定。我通常首先使用
mvn dependency:tree

进行一些调查。您是否尝试为您的项目打印maven dependency树?是。
mvn dependency:tree
h2
显示为
我的服务
的直接依赖项,即使它没有声明在pom中。它显示h2是我的libs的依赖项,这是我的服务的依赖项。h2称为transitve依赖项。因此,您需要查看我的libs pom文件。这表明您在我的服务中使用版本1.3.168声明h2,而它是使用1.4.190声明的,这是强制规则的原因……您应该检查m首先是y-libs,它是父项…搜索DependencyManager…@khmarbaise这也是我的想法。但是,
my service
pom中没有声明
h2
。它应该只是一个可传递的依赖项,但事实上它也是一个直接依赖项。正如我所写的。检查父项和DependencyManager。清晰、高质量的答案。我最终使用了降级方案
+-com.example.services:my-service:1.0.0-SNAPSHOT
  +-com.example.libs:my-libs:2.0.0
    +-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190

    <dependency>
      <groupId>com.example.libs</groupId>
      <artifactId>my-libs</artifactId>
      <version>2.0.0</version>
      <exclusions>
        <exclusion> 
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>