2010-06-07 209 views
4

我正在使用ant,ivy和nexus回購管理器來構建和存儲我的工件。我設法讓所有的工作都能正常工作:依賴解決和發佈。直到我遇到問題...(當然!)。常春藤和快照(Nexus)

我發佈到nexus中的'release'回購協議,它被鎖定爲'禁用重新部署'(即使您將設置更改爲'允許重新部署'(真正的跛腳UI有imo)。當我發現我的更改沒有通過回購更新之前,我才意識到發生了這種情況。

無論如何,我現在必須切換所有內容,以便在nexus中使用'Snapshot'回購問題。我嘗試了各種各樣的東西,包括廣泛的谷歌搜索,並沒有得到任何地方。我得到的錯誤是一個錯誤的PUT請求,錯誤代碼400.

能得到這個工作的人請給我是一個普通人我錯過了什麼。

非常感謝,

阿拉斯泰爾

僅供參考,這裏是我的配置:

注意,我在得到快照刪除的任何企圖工作,我不知道什麼是真正(潛在)有用,什麼是完整的古芙。因此這是工作發行版的設置。

此外,請注意,我已將XXX-API ivy.xml添加爲僅供參考。我甚至無法讓xxx-common發佈(而且甚至沒有依賴關係)。

Ant任務:

<target name="publish" depends="init-publish"> 

    <property name="project.generated.ivy.file" value="${project.artifact.dir}/ivy.xml"/> 
    <property name="project.pom.file" value="${project.artifact.dir}/${project.handle}.pom"/> 

    <echo message="Artifact dir: ${project.artifact.dir}"/> 
    <ivy:deliver 
    deliverpattern="${project.generated.ivy.file}" 
    organisation="${project.organisation}" 
    module="${project.artifact}" 
    status="integration" 
    revision="${project.revision}" 
    pubrevision="${project.revision}" /> 

    <ivy:resolve /> 

    <ivy:makepom 
    ivyfile="${project.generated.ivy.file}" 
    pomfile="${project.pom.file}"/> 

    <ivy:publish 
    resolver="${ivy.omnicache.publisher}" 
    module="${project.artifact}" 
    organisation="${project.organisation}" 
    revision="${project.revision}" 
    pubrevision="${project.revision}" 
    pubdate="now" 
    overwrite="true" 
    publishivy="true" 
    status="integration" 
    artifactspattern="${project.artifact.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    /> 


</target> 

夫婦的ivy文件給內部依賴的一個想法:

XXX,共同的項目:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info 
     organisation="com.myorg.xxx" 
     module="xxx_common" 
     status="integration" 
     revision="1.0"> 
</info> 
<publications> 
    <artifact name="xxx_common" type="jar" ext="jar"/> 
    <artifact name="xxx_common" type="pom" ext="pom"/>  
</publications> 
    <dependencies> 
    </dependencies> 
</ivy-module> 

XXX-API項目:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info 
     organisation="com.myorg.xxx" 
     module="xxx_api" 
     status="integration" 
     revision="1.0"> 
</info> 
<publications> 
    <artifact name="xxx_api" type="jar" ext="jar"/> 
    <artifact name="xxx_api" type="pom" ext="pom"/>  
</publications> 
    <dependencies> 
     <dependency org="com.myorg.xxx" name="xxx_common" rev="1.0" transitive="true" /> 
    </dependencies> 
</ivy-module> 

IV Y Settings.xml:

<ivysettings> 

<properties file="${ivy.project.dir}/project.properties" /> 


<settings 
    defaultResolver="chain" 
    defaultConflictManager="all" /> 

<credentials host="${ivy.credentials.host}" realm="Sonatype Nexus Repository Manager" username="${ivy.credentials.username}" passwd="${ivy.credentials.passwd}" /> 

<caches> 
    <cache name="ivy.cache" basedir="${ivy.cache.dir}" /> 
</caches> 

<resolvers> 
    <ibiblio name="xxx_publisher" m2compatible="true" root="${ivy.xxx.publish.url}" /> 
    <chain name="chain"> 
    <url name="xxx"> 
    <ivy pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/ivy-[revision].xml" /> 
    <artifact pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url>   
    <ibiblio name="xxx" m2compatible="true" root="${ivy.xxx.repo.url}"/> 
    <ibiblio name="public" m2compatible="true" root="${ivy.master.repo.url}" />  
    <url name="com.springsource.repository.bundles.release"> 
    <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url> 
    <url name="com.springsource.repository.bundles.external"> 
    <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url> 
    </chain> 
</resolvers> 



</ivysettings> 
+0

我應該注意到我試着給所有的修改變量添加-SNAPSHOT。當ivy無法創建已解決 - *。xml常青藤文件時,失敗了......我找不到任何地方我錯過了:( – 2010-06-07 14:57:34

回答

3

w00h00t。

(要求世界尋求幫助,通常你會更快地解決問題,即使沒有迴應)。

無論如何,有興趣的就來到了兩件事情:

一)增加-SNAPSHOT的所有版本。這涉及到第二個ivy.xml - > ivy.SNAPSHOT.xml,並在ivy ant任務中明確引用它。 b)假設這是一個手動添加,我不得不通過我的整個構建文件樹並提供並行路徑來釋放和快照流。在我看來,這是跛腳的。但是,正如我猜想的那樣,我們不太可能發明任何其他類型的流量,這可能不會膨脹,並且2個並行流量就是它將停留的地方。 c)我指定了常春藤的各種提示來檢查快照的更新。例如分解器上的checkUpdated="true"changePattern=".*-SNAPSHOT"。並且增加了

<modules org="myorg" name=*" resolveMode="dynamic" /> 

不過,如果自動集成了快照,它會很好。 A (可選)常春藤部分的聰明。讓我們面對現實吧,像nexus這樣的maven repos真的很有用,而且我當然只使用ivy來得到maven的蹩腳構建過程。 I like using nexus。

無論如何。如果有人想要進一步質疑,請隨意。

+1

「有些東西要求世界尋求幫助」 - 它被稱爲「Rubber Ducking 「 - https://en.wikipedia.org/wiki/Rubber_duck_debugging :) – 2013-06-20 10:33:54

1

我不確定這是否有助於解決2組配置的問題,但至少build.xml會稍微簡單一些。

您可以將ivy.xml中info元素的revision屬性定義爲$ {project.revision}。

然後,您可以省略build.xml中ivy元素的revision =「$ {project.revision}」屬性。

見我對這個答案,例如另一個問題: https://stackoverflow.com/a/8853823/1148030

0

應該指出,唯一需要的步驟是包括「-SNAPSHOT」修訂發佈的Nexus的時候。答案中列出的其他步驟是可選/改進。要下拉發佈的項目,您還需要在修訂中添加「-SNAPSHOT」。