posts - 56, comments - 77, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Ivy: 搭建本地倉(cāng)庫(kù)

          Posted on 2007-12-23 23:22 切爾斯基 閱讀(5949) 評(píng)論(0)  編輯  收藏

          基本上, 搭建一個(gè)本地的ivy倉(cāng)庫(kù), 包含兩件獨(dú)立的事情: 搭建倉(cāng)庫(kù)本身, 和配置如何使用這個(gè)倉(cāng)庫(kù)

          倉(cāng)庫(kù)本身

          Ivy的Repository是由一個(gè)個(gè)Module組成的, Module則包含自身的artifacts(通常是jar文件)和描述文件.

          Module的描述文件是ivy的核心, 里面記錄了這個(gè)module包含哪些artifacts和這個(gè)module對(duì)其它module的依賴(lài). 這樣就能順藤摸瓜, 牽出所有的依賴(lài)來(lái)

          <ivy-module version="1.0">

          <info organisation="your.company" module="your.project" />

          <configurations>

          <conf name="release" />

          <conf name="testing" extends="release" />

          </configurations>

          <publications>

          <artifact name="common" />

          <artifact name="client" />

          <artifact name="server" />

          </publications>

          <dependencies defaultconf="release->default">

          <dependency name="ant" rev="1.7.0" />

          <dependency name="antlr" rev="2.7.6" />

          <dependency name="xstream" rev="1.2.2" />

          </dependencies>

          </ivy-module>

          倉(cāng)庫(kù)在文件系統(tǒng)上的結(jié)構(gòu), 可以由你自己決定, 只要在使用這個(gè)倉(cāng)庫(kù)時(shí), 把它的布局信息用配置文件描述出來(lái)告訴使用者就可以了

          如何使用這個(gè)倉(cāng)庫(kù)

          基本上, 我們借助 Ant 來(lái)使用ivy, 那么我們需要告訴 Ant 一些repository相關(guān)的信息 : Where is the local repository, and How it looks like

          <property name="ivy.local.default.root" location="/your/local/ivy/repository/folder" />

          <ivy:settings id="ivy.instance" file="${ivy.local.default.root}/ivy.repository.settings.xml" />

          那個(gè)ivy.repository.settings.xml就是來(lái)描述repository的布局的:

          <ivysettings>

          <settings defaultResolver="local" />

          <resolvers>

          <filesystem name="local" checkmodified="true">

          <artifact pattern="${ivy.local.default.root}/[module]/[artifact].jar" />

          <artifact pattern="${ivy.local.default.root}/[module]/[artifact]-[revision].jar" />

          <ivy pattern="${ivy.local.default.root}/[module]/[module]-dependencies.xml" />

          </filesystem>

          </resolvers>

          </ivysettings>

          然后你告訴 Ant 你的項(xiàng)目的依賴(lài)和artifacts, Ant就可以幫你獲得依賴(lài)和發(fā)布artifacts了

          <property name="ivy.dep.file" location="${basedir}/my-module-dependencies.xml" />

          <ivy:retrieve />

          <!-- retrieve dependencies first, then compile, package, ... then publish-->

          <ivy:publish resolver="local" pubrevision="1.0" overwrite="true" forcedeliver="true">

          <artifacts pattern="${build.dir}/dist/[artifact].[ext]" />

          <artifacts pattern="${basedir}/my-module-dependencies.xml" />

          </ivy:publish>

          那個(gè)my-module-dependencies.xml就是你的項(xiàng)目的依賴(lài)描述符, 事實(shí)上ivy也將它看作一個(gè)module,和repository里的module一視同仁. 參考最開(kāi)始的例子.

          Ivy 如何解決我們的問(wèn)題

          Q: 我的項(xiàng)目在開(kāi)發(fā)環(huán)境和產(chǎn)品環(huán)境有不同的依賴(lài), 怎么辦?

          A: Ivy 提供了"configuration" 的概念. 在那個(gè)my-module-dependencies.xml中, 你可以為你的module定義development和product兩種配置, 可以指定每個(gè)artifact隸屬于哪個(gè)配置, 指定每個(gè)dependency屬于哪個(gè)配置. 注意這是一個(gè)遞歸定義, 因?yàn)槟阋蕾?lài)的module也有可能定義了多個(gè)配置, 你需要指定你依賴(lài)于依賴(lài)的哪個(gè)配置,所以這是一個(gè)映射. 比如你的產(chǎn)品在運(yùn)行環(huán)境中依賴(lài)于spring的產(chǎn)品環(huán)境:

          <ivy-module version="1.0">

          <info organisation="your.company" module="your.project" />

          <configurations>

          <conf name="product" />

          <conf name="development" />

          </configurations>

          <dependencies defaultconf="product->default">

          <dependency name="spring" rev="1.7.0" conf="release->product" />

          <dependency name="antlr" rev="2.7.6" conf="development->debug" />

          <dependency name="junit" rev="4.4" conf="development->release" />

          </dependencies>

          </ivy-module>

          ivy 的各個(gè)Ant task允許你指定在哪個(gè) configuration 上操作; 如為product配置取得所有依賴(lài):

              <ivy:retrieve conf="product" />

          Q: 我的項(xiàng)目在開(kāi)發(fā)環(huán)境和產(chǎn)品環(huán)境有太多相同的依賴(lài), 事實(shí)上開(kāi)發(fā)環(huán)境包含產(chǎn)品環(huán)境所有的依賴(lài), 額外再加上junit,jmock等; 如何消除重復(fù)的依賴(lài)描述呢?

          A: Ivy 提供了配置之間 "extends" , 也就是"繼承"的概念, 你可以讓開(kāi)發(fā)環(huán)境的配置繼承自產(chǎn)品環(huán)境的配置, 這樣就可以復(fù)用產(chǎn)品環(huán)境的配置

          <configurations>

          <conf name="product" />

          <conf name="development" extends="product" />

          </configurations>

          Q: 缺省ivy總是從緩存中讀取配置, 這樣我的依賴(lài)配置更新后卻得不到反映; 怎么禁止從cache中讀取配置?

          A: <filesystem name="local" checkmodified="true">


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 横峰县| 云林县| 台东市| 武陟县| 南陵县| 富顺县| 崇明县| 綦江县| 福贡县| 景东| 淳安县| 临沂市| 安阳县| 汝城县| 中方县| 武义县| 巴彦淖尔市| 阳朔县| 汨罗市| 聊城市| 英德市| 虞城县| 大庆市| 游戏| 合水县| 信阳市| 咸阳市| 博罗县| 东台市| 庄浪县| 霍州市| 江安县| 交城县| 商水县| 攀枝花市| 凤翔县| 班玛县| 澎湖县| 延川县| 新和县| 陕西省|