2012-03-07 66 views
1

今天上午我在看一個Ant build.xml文件,發現在根<project>元素的XML namspace delcaration:的Apache常春藤:XML命名空間與進口屬性

<project name="${project.name}" xmlns:ivy="antlib:org.apache.ivy.ant"> 

我想這個XML命名空間是使所有的遍佈buildscript的常春藤任務知道要查找哪個資源以查找任務定義(<ivy:configure>,<ivy:resolve>等),但希望能更全面地解釋此語句的語法。

  • 什麼是螞蟻世界中的「名稱空間」的概念?此xmlns:ivy=屬性是否指向JAR?
  • 哪裏會這樣org.apache.ivy.ant JAR/resources/whatever live?
  • 什麼是antlib和它在哪裏定義?

此外,這裏只是一個短暫的想法,常春藤文件(ivy.xml)有能力導入屬性文件並使用它們的屬性值嗎?我查看了Ivy文檔,但找不到任何導入類型語句的引用。

在此先感謝!

回答

2

就XML而言,名稱空間就像任何其他名稱空間一樣。但是,Ant使用antlib:作爲URL方案來知道它應該在類路徑中查找org/apache.ivy/antlib.xml文件。請參閱antlib在Ant手冊中鍵入。

因爲它正在尋找類路徑,所以antlib.xml可以放在類加載器可以找到的任何地方。默認設置是將必要的jar文件放在<ant install>/lib目錄中。您也可以使用-lib來啓動ant,以指定不同的目錄或僅設置CLASSPATH(不推薦)。

是的,你可以導入屬性文件。請參閱multi-projects上的常春藤手冊信息。 Ivy支持${property}語法,您可以使用Ant的<property>任務來加載Ivy可以使用的文件。如果要爲Ivy定義「全局」值,還可以在ivysettings.xml中使用<property>元素。

0

我只有一個局部的答案,我希望有人可以驗證:

  • 命名空間:我不知道。我認爲它只是一個XML命名空間。
  • 資源:在後端,Ant運行一個Java程序。 Ant的「可執行文件」(實際上只是* NIX上的.sh腳本和Win上的.bat文件)在運行時構建它。
  • antlib:是$ ANT_HOME/lib的路徑。它是在運行時構建的,就像類路徑一樣。
  • ivy屬性文件:是的,您可以使用屬性文件(至少在Eclipse的IvyDE插件中)。我只知道這一點,因爲我們有他們的工作,我不完全理解他們如何工作的機制。