2009-11-19 64 views
6

我有一個相當大的ivy.xml,其中包含許多配置,這些配置對於許多項目都是相同的。如何在ivy.xml中包含文件?

我想把這個大的重複部分放到一個通用的包含文件中。不知何故,我找不到任何文件描述這可以做到。

任何人有一個想法,這是否可行?

編輯:經過一番進一步的思考,我認爲這是不可行的目的。常春藤文件是一個有凝聚力的單元,不應該包含基於文件的引用,只能引用其他常春藤模塊...

回答

9

可以創建一個常春藤元模塊,這取決於(在本例中的文件名common.xml相對於由XML解析器包含XML文件來解決。也可以使用絕對file:協議URI)。在所有的這些共同的包,然後讓你的所有其他項目的解決通過傳遞依賴的公共庫:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
     <info organisation="com.example" module="common-libs"/> 
      <configurations> 
      <conf name="runtime" transitive="true" visibility="public" /> 
      <conf name="master" transitive="true" visibility="public" /> 
      <conf name="compile" transitive="true" visibility="public" /> 
      <conf name="default" transitive="true" visibility="public" extends="master" /> 
      </configurations> 
      <dependencies> 
       <dependency org="oracle" name="ojdbc14_g" rev="10.2.0.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="tomcat" name="servlet-api" rev="6.0.16" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="junit" name="junit" rev="4.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
      </dependencies> 
    </ivy-module> 

而對於一個典型的項目:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
    <info organisation="com.example" module="myproject"/> 
     <configurations> 
     <conf name="runtime" transitive="true" visibility="public" /> 
     <conf name="master" transitive="true" visibility="public" extends="runtime"/> 
     <conf name="compile" transitive="true" visibility="public" /> 
     <conf name="default" transitive="true" visibility="public" extends="master" /> 
     </configurations> 
     <dependencies> 
     <dependency org="com.example" name="common-libs" rev="latest.release" 
      conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
     </dependencies> 
    </ivy-module> 

這裏我使用的是來自POM-> Ivy翻譯的Maven解析器的傳統配置命名約定,儘管您可以用任何對您有意義的方式映射配置名稱。我傾向於使用ivy:install任務將Maven模塊複製到我們的常青藤資源庫中,因此我大部分都使用默認的ivy.xmls。如果您使用的是IvyRoundup,那麼您主要需要以傳遞方式映射「默認」配置。

2

如果您使用的是來自ant的ivy,並且您正在運行Ant 1.6或更高版本,則可以使用<import>任務將構建文件片段包含在您的ant構建文件中。引用的文件必須是完整的Ant構建文件,但:

<?xml version="1.0"?> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    <import file="./common.xml"/> 
    ... 
</project> 

你也可以使用標準的XML語法從ivy.xmlbuild.xml文件中:

<?xml version="1.0"?> 
<!DOCTYPE project [ 
     <!ENTITY common SYSTEM "common.xml"> 
]> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    &common; 
    ...  
</project> 

這將字面上包括common.xml內容你已經放置了&common;實體。