Maven文件结构分析

来源:互联网 发布:c语言比较字符串大小 编辑:程序博客网 时间:2024/05/17 23:28

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                        http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>     <groupId>com.dushangkui.domyself</groupId>    <artifactId>hello-world</artifactId>    <version>1.0-SNAPSHOT</version>  <name>maven hello world</name>  <packaging>pom</packaging>  <modules>…</modules>  <profiles>…</profiles>    <dependencies>    <dependency>  <groupId>junit</groupId>  <artifactId>junit</artifactId>  <version>4.7</version>  <scope>test</scope>    </dependency>  </dependencies>       </project>

第一行是XML头, 指定了该XML文档的版本和编码方式。

<project>元素是所有pom.xml的根元素。它还声明了一些POM相关的命名空间及xsd元素,虽然这些属性不是必须的,但这些属性能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。
<modelVersion>指定了当前POM模型的版本,对于Maven2和Maven3来说,它只能是4.0.0。
<groupId>、<artifactId>和<version>定义了一个项目的基本坐标
<groupId>定义了项目属于哪个组,这个组往往和项目所在的组织和公司存在关联。Maven项目和实际项目不一定是一对一的关系。
<artifactId>定义了当前Maven项目(模块)在组中的唯一ID。
<version>指定了当前项目的版本。SNAPSHOT意为快照,说明该项目还处在开发中,是不稳定的版本。
<packaging>定义了Maven项目的打包方式。有jar、war、pom 枚举 默认是jar,pom标识这个模块是聚合模块。
<classifier>元素用来帮助定义构建输出的一些附属构件。
<name>元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个POM声明name,以方便信息交流。
默认情况下,Maven假设项目主代码位于src/main/java目录。
<dependencies>元素是所有依赖的父目录,可以包含多个<dependency>元素。
<dependency>元素声明了一个依赖。
<scope>, <dependency>的子元素<scope>描述了依赖范围,若依赖范围为test则表示该依赖只对测试有效。换句话说,测试代码中的import JUnit代码是没有问题的,但是如果在主代码中使用import JUnit代码,就会造成编译错误。如果不声明依赖范围,那么默认值是compile,表示该依赖对主代码和测试代码都有效。
compile: 编译依赖范围,使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。
test: 测试依赖范围,只对于测试classpath有效,在编译主代码或者运行项目时将无法使用。典型的例子是JUnit,它只在编译测试代码以及运行测试的时候才需要。
provided: 已提供的范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已提供,就不需要Maven重复地引入一遍。
runtime: 运行时依赖范围,使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码编译的时候只需要JDK提供的JDBC接口,只有在执行测试或运行项目的时候才需要实现上述接口的具体JDBC驱动。
system: 系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。用法:
<dependency>
<groupId>java.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
<optional>用来标记依赖是否可选。
<exclusions>用来排除传递性依赖。
1 0
原创粉丝点击