繁体   English   中英

Maven查找在远程存储库中特定版本中具有传递依赖项的依赖项

[英]Maven find dependency having a transitive dependency in a specific version in a remote repository

编辑:“逆向相关性分析”将是我搜索的关键字-不幸的是,我无法正确描述我的问题(也许这与不符合标准的事情有关-我甚至没有真正的用例为了这)。

说我有一个典型的收敛性问题,并且dependency:tree告诉我这样的事情:

[INFO] com.my.group:myProject:jar:1.0.1 [INFO] +- org.not.my.group:a-direct-dependency:jar:1.1:compile [INFO] | \\- org.not.my.group:transitive-dependency-A:jar:1.14.0:compile [INFO] \\- org.not.my.group:another-direct-dependency:jar:1.1:compile [INFO] \\- (org.not.my.group:transitive-dependency-A:jar:1.18.0:compile - omitted for conflict with 1.14.0)

有没有一种方法可以分析中央存储库(也可以使用nexus webgui)来确定是否存在依赖于传递依赖的org.not.my.group:a-direct-dependency:jar的(较新版本) org.not.my.group:transitive-dependency-A:jar但版本为1.18.0而不是1.14.0?

或通常被问到:我可以通过中央存储库(或任何远程存储库)找出谁依赖工件,就像我在本地使用它一样?

mvn dependency:tree -Dincludes=org.not.my.group:transitive-dependency-A:jar:1.18.0 -Dverbose

为了进一步说明:在上面的(假想的)方案中,我将使用三个“级别”的解决方案来解决收敛问题,而第一个可能的选择就是第一个,最新的是“不正确的修正”。

1-Allign版本 :如果我的依赖项-自己或第三方-直接或传递-确实依赖于相同的工件X但定义了不同的版本,我最好尝试找到X的较新版本或树中对X的依赖项其余依赖项的通用版本。 这样,我假设X是“适当升级”的,因为他们可能需要应用代码更改。

2-排除依赖项:如果我找不到这样的工件,我将成功尝试排除较低的版本,希望具有此排除项的依赖项可以处理较新的版本。 这需要严格的测试,因为我没有保证可以正确指向该版本的较新版本-我从根本上告诉maven“该依赖项也将与版本的另一个依赖项一起工作,即使这样我也没有对该依赖项的内部设计的想法“-即使编译有效,我仍然可能会遇到运行时问题。

3-使用dependencyManagement:由于使用dependencyManagement可能会导致“掩码”(隐藏/出站)强制实施程序插件的某些收敛性问题,我实际上不再认为这是解决方案(针对我的设置)..说我遇到了收敛性问题并使用了dependencyManagement解决了这个问题-后来-传递依赖项之一发生更改,并导致了类似的收敛性问题,强制执行器插件不再能够检测到该问题。

旁注:我希望我的英语会更好,这样我可以更轻松地描述这样的特定主题……最终,你们也更容易理解我。 感谢您已经收到我的输入:)

如前所述,首先定义直接使用而不依赖于传递依赖的那些依赖。

此外,我将使用maven-enforcer-plugin来防止这种情况。

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

通常,我的英语技能不是很好。-“逆向依赖性分析”本来可以使自己更清楚-有一些插件可以对此进行存档,例如http://tech.finn.no/2013/01 / 31 / i-wish-i-know-my-consumers-maven-reverse-dependency /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM