3

我正在使用 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,因此没有解决依赖关系。

这应该工作还是我误解了什么?

4

1 回答 1

4

我现在已经解决了这个问题。我相信问题只是 Nexus 使用 POM 文件而不是 Ivy 文件工作(至少默认情况下 - 我看不到任何相关的配置选项)。

因此,解决方案是生成一个合适的 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。

于 2010-10-14T14:16:29.083 回答