2012-09-11 72 views
1

因此,我們假設我已經安裝了SVN並在本地安裝了ANT/Ivy。設置Ant/Ivy

我想讓「共享」部分的艾維配置指向某種服務器上的共享。我該如何設置?

我知道我必須挖掘ivy jar並提取ivysettings文件並修改共享存儲庫。

因此我們假設我在MyServer.intranet.net的Intranet上有一臺服務器,我的團隊的文件夾位於/ path/to/NetAdmin下(因此完整路徑爲MyServer.intranet.net/path/to/ NetAdmin)如何將此設置設置爲共享庫的團隊存儲庫?我只是指定它,當我打包項目時,它會在那裏寫入依賴關係?

謝謝

回答

2

這裏我所做的:

  • 我創建了一個名爲ivy.dir一個Subversion項目。
  • 在這個ivy.dir項目中,我有最新的ivy.jar。
  • ivy.dir中,我爲我們的環境設置了ivysettings.xml。例如,我們爲我們自己的罐子使用一個本地的Artifactory Maven倉庫。 ivy.dir項目中的ivysettings.xml指出這一點。
  • 我創建了一個名爲ivy.tasks.xml的文件。這是一個Ant構建文件。

ivy.tasks.xml看起來是這樣的:

<project name="Ivy.Tasks" 
    xmlns:ivy="http://ant.apache.org/ivy" 
    xmlns:jacoco="antlib:org.jacoco.ant"> 

    <property environment="env"/> 

    <!-- Add Ivy Tasks --> 
    <taskdef uri="http://ant.apache.org/ivy" 
     resource="org/apache/ivy/ant/antlib.xml"> 
     <classpath> 
      <fileset dir="${ivy.dir}"> 
       <include name="ivy*.jar"/> 
      </fileset> 
     </classpath> 
    </taskdef> 
    <ivy:settings file="${ivy.dir}/ivysettings.xml"/> 
</project> 

請注意,我有我自己的常青藤設置,謝謝。我沒有必要在ivy.jar(儘管我可以有,因爲每個人都會使用我的ivy.jar文件!)。我ivysettings.xml看起來是這樣的:

<ivysettings> 

    <!-- I'll explain this part below --> 
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/> 
    <caches 
     defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}" 
     resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/> 

    <!-- Just the standard stuff you find in the `ivysettings.xml in the ivy.jar --> 
    <settings defaultResolver="default"/> 
    <include file="${ivy.dir}/ivysettings-public.xml"/> <!-- This one is different --> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
</ivysettings> 

最大的變化是ivysetting-public.xml文件:

<ivysettings> 
    <resolvers> 
     <ibiblio name="public" 
      m2compatible="true" 
      checkmodified="true" 
      root="http://repos.vegicorp.com/artifactory/libs-release" /> 
    </resolvers> 
</ivysettings> 

它指向我的本地倉庫 - 我Artifactory的服務器。

現在,開發人員使用常春藤,所有他們需要做的是:

  • 在他們在Subversion項目的根目錄,添加svn:external。這個svn:external將用於將我的ivy.dir項目帶入他們的Subversion項目中。
  • 在build.xml
    • 常春藤命名空間定義在<project>定義添加到他們的build.xml
    • 設置屬性ivy.dir成`$ {BASEDIR} /ivy.dir。
    • 使用<import>任務導入${ivy.dir}/ivy.tasks.xml到他們build.xml文件。

事情是這樣的:

<project name="post-a-matic" default="package" basedir="." 
    xmlns:ivy="http://ant.apache.org/ivy"> 

    <property name="ivy.dir" value="${basedir}/ivy.dir"/> 
    <import file="${ivy.dir}/ivy.tasks.xml"/> 

    <!-- A whole bundle of properties are set --> 

    <target name="clean"> 
     <delete dir="${target.dir}"/> 
     <ivy:cleancache/> <!-- Look: They have access to Ivy! --> 
    </target> 

    <target name="-resolve"> 
     <ivy:resolve/> 
    </target> 

    <target name="compile" 
     depends="-resolve"> 

     <ivy:cachpath 
      pathid="main.classpath" 
      conf="compile,provided"/> 

     <!-- Boy that's easy! --> 

     <javac srcdir="${main.srcdir}" 
      destdir="${main.destdir}" 
      classpathref="main.classpath"/> 
    </target> 

    <!-- On and on --> 

這解決了很多問題:

  • 您可以更新ivy.settings,每個人都會有更新的設置。這對我們來說非常重要,因爲我們使用Jenkins,並且我希望Jenkins清理每個構建的常青​​藤緩存。哎呦!這清除了同時執行的構建中的常青藤緩存!我通過更改ivysettings.xml文件來爲每個Jenkins構建執行程序定義不同的Ivy緩存來解決此問題。其中詹金斯服務器,你有常春藤緩存稱爲$HOME/.ivy2/cache-0$HOME/.ivy2/cache-1等。每個執行人可以刪除它自己的常青藤緩存,而不影響其他人。用戶,同時將只有$HOME/.ivy2/cache-0
  • 當新的罐子出來時,你也可以更新常春藤。你更新你的Ivy jar文件,每個人都得到相關的。
  • 很大的一個原因是當項目檢出時,常春藤會自行安裝。
  • 和一個額外的特別獎勵:你可以使用你的ivy.dirivy.tasks.xml文件來安裝其他任務。例如,我們的每一個項目必須通過FindbugsPMD,CPD(PMD的項目,Checkstyle的一部分運行本身,並使用JaCoCo。對於測試覆蓋率。

這些項目中的每一個由一個jar文件,和一個<taskdef>來將任務定義拉入Ant中,並且你怎麼也使用這些任務?它們沒有在標準的Ant模型中定義,開發人員也不知道如何使用它們。這些罐子到我ivy.dir項目,並安裝了所有的任務定義爲我的ivy.tasks.xml文件。我還定義了易於使用的<macrodef>大多數這些任務,所以開發人員很容易使用它們。事實上,我甚至包含了舊的Ant-Contrib任務,只是爲了好玩。

現在,一旦你添加ivy.dir到你的項目,你把所有的這些額外的任務,你有什麼可安裝在機器上。

+0

大衛,你能爲我提供某種資源的,這樣我可以反映這個設置?據我所知,我們只是運行svn,而不是Svn:外部和我的團隊正在尋找我設置的東西,這聽起來像處理(並超出)我們當前的所有問題。 謝謝 –

1

你不需要改變常春藤罐子。只需在ivysettings文件中創建一個文件系統解析器併發布到此。這裏有一個例子:

你會發現,常春藤是非常靈活,可以支持幾乎任何機構主辦的文件。

就我個人而言,我會考慮安裝一個像NexusArtifactory這樣的Maven倉庫管理器,並使用它來承載您的構建依賴項和構建輸出。從長遠來看,這很容易,尤其是如果你在做Java開發。