2011-12-01 29 views
1

我正在拼命地嘗試使用此工作。我花了整整一天的時間,無法找到問題所在。在IVY中使用狀態,適用於「不太穩定的」(即整合),而不適用於其他(即里程碑和版本)

看來,IVY只能解決狀態列表中「不太穩定的狀態」,即對於默認狀態,只有集成不是里程碑或釋放。

這是一個測試ant文件。

<project name="helicopter" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> 
    <ivy:settings file="ivysettings.xml" id="ivy.instance"/> 
    <!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't --> 
    <ivy:resolve file="ivy.xml" /> 
    <ivy:retrieve type="swc" pattern="../libs/bin/[module]-[revision].[ext]" /> 
    <ivy:retrieve type="src" pattern="../libs/src/[module]-[revision].[ext]" /> 
</project> 

這是ivysettings.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ivysettings> 
    <settings defaultResolver="local" /> 

    <resolvers> 
     <filesystem 
      name="local" 
      checkmodified="true"> 
      <artifact pattern="C:/repository/[organisation]/[module]/[revision]/[artifact].[ext]" /> 
     </filesystem> 
    </resolvers> 
</ivysettings> 

這是的ivy.xml

<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.org" 
     module="moduleA" 
     status="integration" 
    /> 

    <publications> 
     <artifact type="swf" ext="swf" /> 
     <artifact type="src" ext="src.zip" /> 
    </publications> 

    <dependencies> 
     <dependency org="com.org" name="moduleB" rev="latest.integration"> 
      <artifact name="moduleB" type="swc" ext="swc" /> 
      <artifact name="moduleB" type="src" ext="src.zip" /> 
     </dependency> 
    </dependencies> 
</ivy-module> 

與存儲庫(文件夾)的moduleB的ivy.xml

<info organisation="com.org" module="moduleB" revision="0.0.5.0" status="integration" publication="20111201174403"/> 

<publications> 
    <artifact type="swc" ext="swc"/> 
    <artifact type="src" ext="src.zip"/> 
</publications> 

<dependencies> 
</dependencies> 

因此,這將工作,moduleB將被下載所有權利。
現在如果我編輯的ivy.xml得到latest.milestone

<info 
     organisation="com.org" 
     module="moduleA" 
     status="integration" 
    /> 

    <publications> 
     <artifact type="swf" ext="swf" /> 
     <artifact type="src" ext="src.zip" /> 
    </publications> 

    <dependencies> 
     <dependency org="com.org" name="moduleB" rev="latest.milestone"> 
      <artifact name="moduleB" type="swc" ext="swc" /> 
      <artifact name="moduleB" type="src" ext="src.zip" /> 
     </dependency> 
    </dependencies> 
</ivy-module> 

和編輯我發表的moduleB(因此編輯在儲存庫文件夾)的的ivy.xml是地位的里程碑

<info organisation="com.org" module="moduleB" revision="0.0.5.0" status="milestone" publication="20111201174403"/> 

<publications> 
    <artifact type="swc" ext="swc"/> 
    <artifact type="src" ext="src.zip"/> 
</publications> 

<dependencies> 
</dependencies> 

它不會工作,神器不會被發現,雖然上市

:: problems summary :: 
:::: WARNINGS 
     module not found: com.org#moduleB;latest.milestone 

    ==== local: tried 

     -- artifact com.org#moduleB;latest.milestone!moduleB.src.zip(src): 

     C:/repository/com.org/moduleB/revision]/moduleB.src.zip 

     [0.0.5.0 (MD)] 

     -- artifact com.org#moduleB;latest.milestone!moduleB.swc: 

     C:/repository/com.org/moduleB/[revision]/moduleB.swc 

     [0.0.5.0 (MD)] 

現在的樂趣! 在使用IVY的默認狀態之前,我使用了我的。 它具有完全相同的行爲(這就是爲什麼我嘗試了默認值之一)。 樂趣位的是,如果我有

<statuses default="status-dev"> 
    <status name="status-stable" integration="false"/> 
    <status name="status-test" integration="false"/> 
    <status name="status-dev" integration="true" /> 
</statuses> 

唯一的最新產品。[狀態]工作將是狀態-dev的。現在 如果我更改了狀態,以

<statuses default="status-dev"> 
    <status name="status-stable" integration="false"/> 
    <status name="status-dev" integration="true" /> 
    <status name="status-test" integration="false"/> 
</statuses> 

唯一一個工作將是狀態測試。

我」困惑在這裏...:/

感謝所有幫助您可以提供。 歡呼聲, Xavier

我已經創建了一個顯示怪異行爲的基本項目。
moduleB是正在發佈的模塊。
moduleA是作爲依賴關係獲取moduleB的模塊。
請更新路徑到本地倉庫兩個ivysettings文件
鏈接下載文件
https://rapidshare.com/files/1326835940/test_ivy.zip

+0

如果使用狀態它可能會幫助清除常春藤緩存發揮各地。也許緩存包含ivy.xml的舊版本。 – oers

+0

您好,感謝您的評論,但唉,我已經清除了許多次緩存,手動或通過一個螞蟻任務。 謝謝你的評論,雖然 – nolazybits

回答

3

哇,這看起來像依賴結構的一個很奇怪的超載。我會堅持一個簡單的ivy.xml,並在moduleB上單獨依賴。只需在運行時使用屬性文件更改rev屬性即可。也就是說,合併所有的依賴關係爲:

<dependency org="com.org" name="moduleB" rev="${dependency.rev.moduleB}" 
    conf="build-release->default;build-milestone->default;build-devs->default"> 
      <artifact name="shared" type="swc" ext="swc" /> 
      <artifact name="shared" type="src" ext="src.zip" /> 
    </dependency> 

你甚至可以在你的常春藤的settings.xml提供一個默認值的屬性(IvyDE爲例):

<property name="dependency.rev.moduleB" 
      value="latest.integration" 
      override="false"/> 

而且,你要編輯ivysettings.xml包括存儲庫的模式找到的ivy.xml文件:

<resolvers> 
     <filesystem 
      name="local" 
      checkmodified="true"> 
      <artifact pattern="C:/repository/[organisation]/[module]/[revision]/[artifact].[ext]" /> 
      <ivy pattern="C:/repository/[organisation]/[module]/[revision]/ivy.xml" /> 
     </filesystem> 
    </resolvers> 
+0

是的,我同意這是一個奇怪的。我試圖在屬性文件中設置修訂。相同的結果...只有狀態定義中的最後一個狀態才能被解決... – nolazybits

+1

我已經更新了這個問題,儘可能使用盡可能簡單的示例,但行爲仍然相同。 Thx – nolazybits

+0

所以失蹤的常春藤模式是罪魁禍首?編輯中的信息非常有趣,你應該在這裏發佈信息和錯誤鏈接。 – oers

相關問題