今天早上我查看了一个Ant build.xml
文件,注意到根<project>
元素中有一个XML名称空间delcaration:
<project name="${project.name}" xmlns:ivy="antlib:org.apache.ivy.ant">
我认为这个XML名称空间是为了让散布在整个构建脚本中的所有Ivy任务都知道在哪个资源中查找任务定义(<ivy:configure>
、<ivy:resolve>
等),但希望对该语句的语法有更全面的解释。
- Ant世界中"名称空间"的概念是什么?这个
xmlns:ivy=
属性是否指向JAR - 这个
org.apache.ivy.ant
JAR/resources/whatever会住在哪里 - 什么是
antlib
,它在哪里定义
此外,这里只是一个短暂的想法,Ivy文件(ivy.xml
)是否能够导入属性文件并使用其属性值?我查看了Ivy文档,但找不到任何导入类型语句的引用。
提前感谢!
就XML而言,命名空间与任何其他命名空间一样。但是,Ant使用antlib:
作为URL方案来知道它应该在类路径中查找org/apache.ivy/antlib.xml
文件。请参阅Ant手册中的antlib类型。
由于它在寻找类路径,所以antlib.xml可以放在类加载器可以找到的任何地方。默认设置是将必要的jar文件放在<ant install>/lib
目录中。您也可以用-lib
启动ant来指定不同的目录,或者只设置CLASSPATH
(不推荐)。
可以,您可以导入属性文件。请参阅Ivy手册中关于多项目的信息。Ivy支持${property}
语法,您可以使用Ant的<property>
任务来加载Ivy可以使用的文件。如果要为Ivy定义"全局"值,也可以在ivysettings.xml中使用<property>
元素。
我只有一个部分答案,我希望有人能验证:
- namespace:我不确定。我认为这只是一个XML命名空间
- 参考资料:在后端,Ant运行一个Java程序。Ant的"可执行文件"(实际上只是*NIX上的.sh脚本和Win上的.bat文件)在运行时构建它
- antlib:是$ANT_HOME/lib的路径。它是在运行时构建的,就像类路径一样
- ivy属性文件:是的,您可以使用属性文件(至少使用Eclipse的IvyDE插件)。我之所以知道这一点,是因为我们有他们在工作,我不完全了解他们如何工作的机制