Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
maven for“的依赖项管理和依赖项之间的差异;“提供”;范围_Maven_Maven 3_Pom.xml_Parent Pom_Transitive Dependency - Fatal编程技术网

maven for“的依赖项管理和依赖项之间的差异;“提供”;范围

maven for“的依赖项管理和依赖项之间的差异;“提供”;范围,maven,maven-3,pom.xml,parent-pom,transitive-dependency,Maven,Maven 3,Pom.xml,Parent Pom,Transitive Dependency,我提到了这个帖子,但这个问题是具体的 父POM: <dependencyManagement> <dependencies> <dependency> <groupId>com.company.rtdp.rtds</groupId> <artifactId>rtds-client</artifactId> <version>${rtdp.rtds-cli

我提到了这个帖子,但这个问题是具体的

父POM:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.company.rtdp.rtds</groupId>
      <artifactId>rtds-client</artifactId>
      <version>${rtdp.rtds-client.version}</version>
      <!-- SCENARIO 1 : Either give scope here in parent POM -->
      <!-- <scope>provided</scope> -->
    </dependency>
  </dependencies>
</dependencyManagement>

<rtdp.rtds-client.version>1.4.6</rtdp.rtds-client.version>
 <dependencies>
    <!-- SCENARIO 2
    <dependency> 
        <groupId>com.company.rtdp.rtds</groupId> 
        <artifactId>realtimedataserv-client</artifactId> 
        <version>1.4.6</version>
        <scope>provided</scope> 
    </dependency> 
    -->

    <dependency> 
        <groupId>com.company.idi</groupId> 
        <artifactId>idi-persistence</artifactId>
        <version>3.3</version>
        <!--  has a dependency of com.company.rtdp.rtds:rtds-client:jar:1.4.6:compile -->
    </dependency>
 </dependencies>

<!-- SCENARIO 1: OR give scope here in child POM 
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.company.rtdp.rtds</groupId>
      <artifactId>rtds-client</artifactId>
      <version>1.4.6</version>
      <scope>provided</scope> 
    </dependency>
  </dependencies>
</dependencyManagement>
-->
问题:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.company.rtdp.rtds</groupId>
      <artifactId>rtds-client</artifactId>
      <version>${rtdp.rtds-client.version}</version>
      <!-- SCENARIO 1 : Either give scope here in parent POM -->
      <!-- <scope>provided</scope> -->
    </dependency>
  </dependencies>
</dependencyManagement>

<rtdp.rtds-client.version>1.4.6</rtdp.rtds-client.version>
 <dependencies>
    <!-- SCENARIO 2
    <dependency> 
        <groupId>com.company.rtdp.rtds</groupId> 
        <artifactId>realtimedataserv-client</artifactId> 
        <version>1.4.6</version>
        <scope>provided</scope> 
    </dependency> 
    -->

    <dependency> 
        <groupId>com.company.idi</groupId> 
        <artifactId>idi-persistence</artifactId>
        <version>3.3</version>
        <!--  has a dependency of com.company.rtdp.rtds:rtds-client:jar:1.4.6:compile -->
    </dependency>
 </dependencies>

<!-- SCENARIO 1: OR give scope here in child POM 
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.company.rtdp.rtds</groupId>
      <artifactId>rtds-client</artifactId>
      <version>1.4.6</version>
      <scope>provided</scope> 
    </dependency>
  </dependencies>
</dependencyManagement>
-->
如果我在子POM中包含以下内容,而周围没有

<dependency>
    <groupId>com.company.rtdp.rtds</groupId>
    <artifactId>rtds-client</artifactId>
    <version>1.4.6</version>
    <scope>provided<scope>
</dependency>
ii)
在儿童POM中提供直接
/
,周围无

虽然省略了较长的路径,但它并没有说
已提供
,而只是
单独编译

[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ read-rest-service ---
[INFO] +- com.company.rtdp.rtds:realtimedataserv-client:jar:1.4.6:provided (scope not updated to compile)

我无法理解您在
1)中提供的
,它被调用而不是
。2) 这可能是因为:“您可以通过在项目的POM中显式声明来保证版本。请注意,如果两个依赖项版本在依赖项树中的深度相同,[…]自Maven 2.0.9以来,声明中的顺序最重要:第一个声明获胜。”问题不在于版本冲突的解决。这是关于范围冲突。为什么它不能像解析
版本一样解析作用域?假设在最后一段代码中提供了版本
1.4.6
,我将该版本替换为
1.8
,保留相同的
范围
,rtds客户端作为子pom中其他依赖项的传递依赖项,切换到版本1.8(版本冲突得到解决),但它不会切换到提供的
(它仍在
编译中)
!它接受一个明确声明的版本,但为什么不接受范围?可能不必要的信息可能会引起混淆,但可能有用:我不直接在我的项目中使用rtds客户机类。因此,我不必明确地在
中声明它,只是为了让它
提供
(如果它真的起作用的话)(看起来明确提到
中的依赖关系的目的是只针对版本,它的意思是针对那些必须在我们的项目中直接使用类的依赖关系)尽管对我来说这听起来是一个很好的解决方案。[继续]因此最好在子pom或父pom中提及
提供的
,以传播此标记中的所有内容(如果它们在层次结构中被使用)。但假设我在项目中使用rtds客户机类,这种方法听起来是一种非常有效的解决方案。这只是一个例子。它涉及整个依赖项及其声明。“因与1.8冲突而省略”是因为这种调解,因为文档在前一句中也说:“目前,Maven 2.0只支持使用“最近的定义”,这意味着它将使用依赖关系树中与您的项目最接近的依赖关系的版本。”。没有完整的POM,很难说这种行为(在
中提供的
相比)是有意的,因此,是合乎逻辑的还是可能是错误。这就是我所期望的。但是我的依赖关系树的结果是eclipse(3.3.3嵌入式)[也来自maven命令行(3.5.0)]和eclipse Mars.2发行版(4.5.2)的UI
dependency Hierarchy
,与您的模式不匹配。@user104309正如我在对您的问题的评论中提到的,如果没有完整的POM,很难判断出哪里出了问题。如果你加上他们(父母加上一个孩子),我可以进一步研究。POM太大了。我在POMs中添加了更多信息。最后,所有的困惑似乎都是因为eclipse中的UI
依赖层次结构
表示依赖树的方式(未在场景2的省略标记上显示
提供的
标记,而在场景1上显示了
提供的
标记,这使我认为在场景2中,rtds客户端将在构建期间打包,因为
提供的
范围不适用于那些省略的传递依赖项)?什么意思
范围未更新以编译
?maven试图用该消息传达什么?
<project ...>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>igb.so</groupId>
        <artifactId>SO-44987444-parent</artifactId>
        <relativePath>../SO-44987444-parent</relativePath>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>SO-44987444-child</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.1</version>
            <!--  has a dependency of org.apache.commons:commons-lang3:jar:3.5:compile -->
        </dependency>
    </dependencies>

</project>
[INFO] ------------------------------------------------------------------------
[INFO] Building SO-44987444-child 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ SO-44987444-child ---
[INFO] igb.so:SO-44987444-child:jar:0.0.1-SNAPSHOT
[INFO] \- org.apache.commons:commons-text:jar:1.1:compile
[INFO]    \- org.apache.commons:commons-lang3:jar:3.5:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
            <scope>provided</scope>
        </dependency>
[INFO] ------------------------------------------------------------------------
[INFO] Building SO-44987444-child 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ SO-44987444-child ---
[INFO] igb.so:SO-44987444-child:jar:0.0.1-SNAPSHOT
[INFO] +- org.apache.commons:commons-text:jar:1.1:compile
[INFO] \- org.apache.commons:commons-lang3:jar:3.5:provided
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>