Java Maven从不同的存储库下载两个相同的jar时,如何选择使用哪个.jar
抱歉,描述太长: 背景:我有两个项目,比方说A和B。内置项目A部署到Nexus Repository Manager OSS 2.12.0 repo A,内置项目B部署到Nexus repo B。我的maven项目需要使用repo A和repo B中的.jar 因此,我将maven.settings文件配置为使用2个不同的Nexus存储库(具有2个镜像) 现在,我看到当我编译我的maven项目时,它将通过repoA,搜索jar,然后通过repoB,搜索jar。当它找到jar时,它将下载它 问题:我曾经对项目A和项目B的JAR使用回购B(回购的所有者把我踢了出去)。因此,我现在在repo a和repo B中都有相同的组件0.0.1快照 Maven现在在编译期间下载这两个快照Java Maven从不同的存储库下载两个相同的jar时,如何选择使用哪个.jar,java,maven,jar,dependency-management,nexus,Java,Maven,Jar,Dependency Management,Nexus,抱歉,描述太长: 背景:我有两个项目,比方说A和B。内置项目A部署到Nexus Repository Manager OSS 2.12.0 repo A,内置项目B部署到Nexus repo B。我的maven项目需要使用repo A和repo B中的.jar 因此,我将maven.settings文件配置为使用2个不同的Nexus存储库(具有2个镜像) 现在,我看到当我编译我的maven项目时,它将通过repoA,搜索jar,然后通过repoB,搜索jar。当它找到jar时,它将下载它 问题:
问题:如果两个.jar名称相同(例如:componentName-0.0.1-SNAPSHOT),maven如何解析使用哪个.jar?我在本地的./m2存储库中看到了一个解析器状态文件,但我不确定它是如何在两个jar之间解析的。理想情况下,我希望maven使用最新更新(基于时间戳)的jar 简短回答:在maven计算的有效POM中,哪个存储库位于第一位。(您可以通过运行
mvn帮助:effective pom
查看您的有效pom)
长答案:
maven解析快照工件的方式(大致)如下:
1) 查看
2) 浏览
中列出的所有存储库
3) 对于每个快照存储库,检查是否存在该依赖项的组、包名称和版本的文件
例如,给定包坐标:io.packagecloud:jake:4.0-SNAPSHOT
,它将在每个配置的存储库中查找/io/packagecloud/jake/4.0-SNAPSHOT/maven metadata.xml
4) 如果找到此文件,则使用它查找要加载的最新工件。请看一个示例maven metadata.xml
:
$ curl -L https://packagecloud.io/capotej/snapshot_example/maven2/io/packagecloud/jake/4.0-SNAPSHOT/maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>io.packagecloud</groupId>
<artifactId>jake</artifactId>
<version>4.0-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20161003.234325</timestamp>
<buildNumber>2</buildNumber>
</snapshot>
<lastUpdated>20161003234325</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<extension>jar</extension>
<value>4.0-20161003.234325-2</value>
<updated>20161003234325</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>4.0-20161003.234325-2</value>
<updated>20161003234325</updated>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
希望这能回答你的问题
相关的:
您不应该使用修订时间戳作为选择JAR的主要方法;改为使用版本号。可能只是增加版本,例如,
componentName-0.0.2-SNAPSHOT
如果Nexus有1个托管存储库和2个代理存储库,其中包含相同的jar,那么可能会重复相同的版本号吗?如果代理A恰好在库X上有一个比代理B和托管REPO更新的lastUpdated戳记,则将选择该戳记?合并每个已检查元数据文件的版本,以查找最新版本(基于元数据的时间戳)。
curl -I https://packagecloud.io/capotej/snapshot_example/maven2/io/packagecloud/jake/4.0-SNAPSHOT/jake-4.0-20161003.234325-2.jar