我正在使用Ivy使用以下Ant目标将已构建Jar的快照发布到本地托管的Nexus存储库。
<target name="publish">
<ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" overwrite="true">
<artifacts pattern="${dist.dir}/[artifact].[ext]" />
</ivy:publish>
</target>
这似乎工作正常,导致Jar及其关联的ivy.xml存在于存储库中(文件名为mymodule-SNAPSHOT.jar和ivy-SNAPSHOT.jar)。
稍后,在另一个构建脚本中,我希望将Jar及其相关的依赖项(即在其ivy.xml中指定)检索到目录中。
这是我正在使用的Ant目标。
<target name="deploy">
<delete dir="deploy" />
<mkdir dir="deploy" />
<ivy:settings file="${ivy.dir}/ivy_deploy_settings.xml" />
<ivy:retrieve organisation="myorg" module="mymodule"
inline="true" revision="SNAPSHOT" pattern="deploy/[artifact].[ext]"/>
</target>
这将Jar检索到目录,但不检索其依赖项。另外,如果我添加
conf="impl"
到检索,它失败,因为找不到配置。
因此,似乎检索只是没有引用ivy.xml,因此无法解析依赖关系。
这应该有用还是我误解了什么?
答案 0 :(得分:4)
我现在已经解决了这个问题。我相信问题只是Nexus使用POM文件而不是常春藤文件(默认情况下至少 - 我看不到任何相关的配置选项)。
因此,解决方案是生成合适的POM并将其与Jar一起发布。
<target name="publish">
<property name="generated.ivy.file" value="${dist.dir}/ivy.xml" />
<ivy:deliver deliverpattern="${generated.ivy.file}"
organisation="${ivy.organisation}"
module="${ivy.module}" status="integration"
revision="${ivy.revision}"
pubrevision="SNAPSHOT"
conf="impl" />
<ivy:makepom ivyfile="${generated.ivy.file}"
pomfile="${dist.dir}/${ivy.module}.pom"/>
<ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT"
publishivy="false" status="integration" overwrite="true">
<artifacts pattern="${dist.dir}/[artifact].[ext]" />
<artifact name="${ivy.module}" type="pom" ext="pom"/>
</ivy:publish>
</target>
请注意,我首先为当前模块(以及我想要的配置)生成一个Ivy文件,以便从中创建POM。