2011-09-01 49 views
2

我剛開始使用Ivy,而且我非常掙扎,因爲我發現Apache網站上的文檔和教程非常混亂,並且與如何不相關我想用它。如何使用Ant將不同名稱的罐子發佈到常春藤

我想用Ant發佈一些jar文件到本地的Ivy倉庫。 Ant腳本創建四個jar文件:

  • 沉渣 - WS-client.jar中
  • 沉渣 - WS-客戶src.jar
  • 沉渣 - enums.jar
  • 沉渣 - 枚舉-SRC。罐子

這些罐子應該在常春藤庫(如sed-ws-client目錄和sed-enums目錄)兩個不同的目錄中結束。版本庫目前在相應的目錄中包含這些jar的0.0.1和0.0.2版本,以及相應的ivy- [version] .xml文件(這是手動完成的)。

我在計算如何構建「發佈」Ant目標和項目的ivy.xml文件時遇到了很多麻煩。我不得不在ivy.xml文件的info標記中放置一個模塊名稱,但這意味着我只能將jar發佈到Ivy存儲庫中的一個目錄中?

我試過各種東西,但Ant構建總是失敗。我只想簡單說明我需要採取哪些步驟才能使其工作。如果需要,可以更改存儲庫結構。

這是我到目前爲止有:

ivy.xml文件:

<ivy-module version="1.0"> 
<info organisation="myorg" module="SED" revision="1.0" status="dev"></info> 

<publications> 
    <!-- ws-client --> 
    <artifact name="sed-ws-client"/> 
    <artifact name="sed-ws-client" type="src"/> 

    <!-- generated --> 
    <artifact name="sed-enums"/> 
    <artifact name="sed-enums" type="src"/> 

</publications> 

</ivy-module> 

Ant目標:

<target name="ivy-publish" description="Produce the ivy.xml file for the built jars"> 
    <ivy:settings file="d:/temp/ivy/ivysettings.xml" /> 
    <ivy:retrieve /> 
    <ivy:publish organisation="myorg" resolver="default" pubrevision="0.0.2" update="true"> 
     <artifacts pattern="${DEPLOY_DIR}/${sed.ws.client.jar}-[type].[ext]" /> 
     <artifacts pattern="${DEPLOY_DIR}/${sed.enums.jar}-[type].[ext]" /> 
    </ivy:publish> 
</target> 

回答

5

我解決了這個2個ivy文件,因爲我的項目發佈2模塊。每個模塊都需要自己的ivy.xml。 這是我的第二個模塊的目標,它有自己的ivy文件(ivy-SI.xml)。

<target name="ivy-publish-si"> 
    <ivy:settings file="${basedir}/../KS.build/ivysettings.xml" /> 
    <!--resolve ist need for publish --> 
    <ivy:resolve 
     file="ivy-SI.xml" 
     revision="${project.version}" 
     conf="compile" 
    /> 
    <ivy:publish 
     srcivypattern="ivy-si.xml" 
     resolver="jars.local" 
     conf="compile" 
     overwrite="true" 
     revision="${project.version}"> 
     <artifacts pattern="dist/[artifact]-[revision].[type]" /> 
    </ivy:publish> 

常春藤SI.xml是非常標準:

<?xml version="1.0" encoding="UTF-8"?> 
<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="readybank" 
    module="KS.SessionInterface" 
    revision="${project.version}" 
    status="integration"/> 
<configurations> 

    <conf name="compile" visibility="public"/> 
    <conf name="run" visibility="public"/> 
    <conf name="deploy" visibility="public"/> 
</configurations> 
<publications> 
    <artifact name="KS.SessionInterface" type="jar" conf="compile" ext="jar"/> 
</publications> 
<dependencies> 
</dependencies> 

</ivy-module> 
3

這是無關緊要如何存儲在倉庫的文物。常春藤通過模塊和工件名稱尋找工件。 通常你應該將一個項目視爲一個常春藤模塊。如果您的項目生成兩個模塊,則將該項目分成兩部分的更好方法。模塊是一起改變的邏輯上一致的一組工件

構建失敗,因爲發佈任務找不到要發佈的構件。

例如,在此發佈任務:

<ivy:publish resolver="${ivy.repository}" update="true" overwrite="true"> 
    <artifacts pattern="${artifacts.dir}/[artifact].[ext]"/> 
</ivy:publish> 

我們告訴艾維從$ {} artifacts.dir文件夾中的ivy.xml描述採取用名和擴展名文物和發佈。 和常春藤。XML在這種情況下是這樣的:

<ivy-module version="2.0"> 
<info organisation="apache" module="commons-cli" revision="1.2" status="release"/> 
<configurations> 
    <conf name="binary" description="provide only binary files"/> 
    <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/> 
</configurations> 
<publications> 
    <artifact name="commons-cli" ext="jar" conf="binary" type="jar"/> 
    <artifact name="commons-cli-javadoc" ext="jar" conf="development" type="javadoc"/> 
    <artifact name="commons-cli-sources" ext="jar" conf="development" type="source"/> 
</publications> 

相關問題