我们的情况有点复杂......
在大多数情况下,我们一直在使用 IVY 和 ANT 来管理我们的构建和依赖关系。现在该公司正朝着使用 Maven 的方向发展。我们有一组称为公共库的项目,供几个核心产品使用。
公共库使用 IVY 并发布到 IVY 存储库。我们还需要为我们的新 Maven 项目提供通用库。因此,当构建和发布公共库时,我修改了脚本以发布到 Maven(Artifactory)以及 IVY。以下是发布已构建的 IVY 项目时现在调用的两个目标:
<target name="publish-ivyrepo" depends="load-ivysettings">
<ivy:resolve file="ivy.xml" />
<ivy:publish
module="${ant.project.name}"
artifactspattern="${dist.dir}/[artifact].[ext]"
resolver="integration"
pubrevision="${build.version}"
status="integration"
overwrite="true"
update="true"/>
</target>
<target name="publish-artifactory" depends="load-ivysettings">
<ivy:resolve file="ivy.xml" />
<ivy:publish
module="${ant.project.name}"
artifactspattern="${dist.dir}/[artifact].[ext]"
resolver="artifactory"
pubrevision="${build.version}-SNAPSHOT"
status="integration"
overwrite="true"
update="true"/>
</target>
这是详细说明解析器的 IVY 设置:
<sftp name="integration" checkmodified="true" changingPattern=".*" host="host" user="ivy" userPassword="abc">
<ivy pattern="${ivy.integration.default.root}/${ivy.public.default.ivy.pattern}"/>
<artifact pattern="${ivy.integration.default.root}/${ivy.public.default.artifact.pattern}"/>
</sftp>
<url name="artifactory" checkmodified="false" changingPattern=".*" m2compatible="true">
<ivy pattern="http://server/artifactory/libs-snapshot-local/${maven.default.ivy.pattern}"/>
<artifact pattern="http://server/artifactory/libs-snapshot-local/${maven.default.artifact.pattern}"/>
</url>
我现在在 Artifactory 中看到了常见的库 jar,其中 SNAPSHOT 代替了唯一的时间戳。但是,源 jar 和 IVY xml 文件没有替换 SNAPSHOT。此外,没有生成 POM 文件(尽管我不知道这是否有必要。
所以这似乎没问题,尽管关于 POM 文件的需求以及 IVY xml 和源 jar 的版本命名存在一些问题。但是,当我现在继续指定从 Maven 项目之一到公共库项目的 SNAPSHOT 版本之一的依赖关系时,它抱怨它无法解决依赖关系:
缺少工件 com.smartstream.common_library:common_library_dao:jar:4.0.0.5-4-SNAPSHOT:compile
我尝试通过 POM 文件和 Maven 设置文件将存储库指定给 Artifactory,但收效甚微:
<repository>
<id>test</id>
<name>simple test</name>
<url>http://server/artifactory/libs-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
奇怪的是,如果我让 IVY 发布一个版本而不是 SNAPSHOT 到 Artifactory 的 libs-release-local 存储库中,所有解决方案都如您所愿。此外,如果我将唯一时间戳指定为依赖版本的一部分(SNAPSHOT 的替代品),它也会解决它。所以这表明 Maven 项目能够解决 Artifactory,只是 SNAPSHOT 版本出了点问题。
在这个问题上,我一直在四处寻找,几乎没有希望。如果您能提供任何见解,将不胜感激。