2010-10-13 89 views
3

我正在使用Ivy使用以下Ant目標將構建的Jar的快照發布到本地託管的Nexus存儲庫。常春藤:檢索在Nexus及其依賴關係中發佈的快照

<target name="publish"> 
    <ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" overwrite="true"> 
     <artifacts pattern="${dist.dir}/[artifact].[ext]" /> 
    </ivy:publish> 
</target> 

這似乎很好地工作,從而在罐和其相關聯的ivy.xml存在於儲存庫(具有文件名MyModule的-SNAPSHOT.jar和常春藤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

我現在已經解決了這個問題。我相信問題只是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> 

注意,我首先產生用於當前模塊常春藤文件(和我的期望的配置),以創建從POM。

+1

您可以在ivy.xml文件中將pom文件添加到已發佈構件的列表中。通過這種方式,發佈任務將使用工件模式屬性來提取它 – 2010-10-17 10:39:46

相關問題