Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开源项目都使用 Maven 作为其构建工具。 而阅读 maven 中的 pom 文件, 是了解一个项目依赖关系和构建方式的重要环节。 但是 pom 文件的头部会让初学者感到困惑, 这里对其进行一个清晰易懂的解释(梳理自网络资料) 先修知识
POM 文件头示例<project xmlns:xsi='http://www./2001/XMLSchema-instance' xmlns='http://maven./POM/4.0.0' xsi:schemaLocation='http://maven./POM/4.0.0 http://maven./maven-v4_0_0.xsd'>
初学者看到如上的内容应当有如下困惑点:
从 xmlns 的作用讲起一个 xml 文档中如果包含如下两种定义不同, 但是名称相同的元素, xml 解析器是无法解析的, 因为它不能确定当你调用
显然, 如果给他们的名字添加一个前缀, 则命名冲突的问题就可以解决。 <!-- 这里的 table 元素描述的是一个表格--><h:table> <!--添加了前缀 h -->
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr></h:table><!-- 这里的 table 元素描述的是一个表格--><f:table> <!--添加了前缀 f -->
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length></f:table>
但是, 在一个拥有众多元素的文档中, 仅仅拥有前缀, 也不能完全避免命名冲突的问题。
此时, 命名空间就诞生了, 我们可以为元素定义一个命名空间, 将一个很长的, 可以保证全局唯一性的字符串与该元素关联起来。这样就可以避免命名冲突了。 但是如何保证那个较长的字符串全局唯一呢, 最好的方式莫过于使用 统一资源标识符(Uniform Resource Identifier,URI) 了, 而我们最常见的 URI 就是平时经常访问的网址 URL 了。
应用到我们所举的例子中就是: <!-- 这里的 table 元素描述的是一个表格--><h:table xmlns:h='http://www./TR/html4/'>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr></h:table><!-- 这里的 table 元素描述的是一个表格--><f:table xmlns:f='http://www.w3school.com.cn/furniture'>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length></f:table>
回到我们的 POM 文档头中,你会发现 xmlns 出现在没有没有前缀的元素中的含义
细心的童鞋会注意到, project 元素前面并没有前缀。 这里实际上使用的是默认命名空间(default naming space)。 它的语法如下: <elementName xmlns='namespaceURI'>
例如我们的 project 元素定义 和下面的例子
使用默认命名空间的作用是, 该元素内部的子元素都会默认属于该命名空间下, 我们不需要为他们一一添加命名空间前缀。 xmlns:xsi 与 xsi:schemaLocation现在来看文件头中剩下的, 看上去更为复杂的部分。 xmlns:xsi='http://www./2001/XMLSchema-instance'xsi:schemaLocation='http://maven./POM/4.0.0 http://maven./maven-v4_0_0.xsd'
根据之前的知识我们可以理解,
那么, 有了上述的理解, 再来看
上面这行的语法其实是,
|
|