maven和pom.xml详解
来源:互联网 发布:mac 一个或多个 编辑:程序博客网 时间:2024/06/13 02:12
一、maven的定义
简单地说maven是一个比较常用的项目构建管理工具。
二、maven的作用
- 统一开发规范
- 统一管理jar包
图2是maven项目自动生成的目录结构。此结构作用一目了然:
- src/main/java放源代码
- src/main/resources放配置文件
- src/test/java放单元测试代码
- targer文件下放编译输出后的代码
- pom.xml是Maven的配置文件
统一管理jar包:我们在pom.xml管理jar包,接下来会介绍pom.xml
三、pom.xml介绍
<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">
<!--指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0-->
<modelVersion>4.0.0</modelVersion>
<!-- 项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如com.wangzuojia生成的相对路径为:/com/wangzuojia-->
<groupId>com.wangzuojia</groupId>
<!--maven构建的项目名,项目的通用名称-->
<artifactId>testwebapp</artifactId>
<!--版本号。SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。groupId、artifactId、version三个元素生成了一个Maven坐标-->
<version>0.0.1-SNAPSHOT</version>
<!--打包的机制,如pom、 jar、 maven-plugin、 ejb、 war、 ear, rar、 par,默认是jar-->
<packaging>war</packaging>
<!-- 项目的名称, Maven 产生的文档用 -->
<name>testwebapp Maven Webapp</name>
<!-- 哪个网站可以找到这个项目,提示如果 Maven 资源列表没有,可以直接上该网站寻找, Maven 产生的文档用 -->
<url>http://maven.apache.org</url>
<!--properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。-->
<properties>
<!-- spring版本号 4.0.2.RELEASE -->
<spring.version>4.2.3.RELEASE</spring.version>
</properties>
<!-- 依赖关系 -->
<dependencies>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<!-- scope 说明
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时,需要使用
- system: 需要外在提供相应得元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用
-->
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 与构建相关的配置-->
<build><!--最终构建之后的名称-->
<finalName>testwebapp</finalName></build></project>
传递性依赖
使用Spring的时候会依赖于其他开源的类库。如A项目依赖了spring-core,spring-core又依赖了spring-asm和commons-logging,那么spring-asm和commons-logging就是A项目的一个传递性依赖。
有了传递性依赖机制,在使用spring-core的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖,Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中去。
依赖调节
传递性依赖有时会产生冲突。此时,我们需要明天传递性依赖的具体路径,这就叫依赖调解,依赖调解主要有两点原则:
1、A->B->C->M,A->D->M,两条依赖路径上都有M,此时遵循路径最近者优先,因此A->D->M将被解析使用
2、A->B->N,A->C->N,N的依赖长度是一样的,从Maven2.0.9开始,此时遵循第一声明者优先,因此A->B->N将被解析使用
依赖排除
maven默认是将所依赖的jar都引用进来。有时候当前项目依赖不同的jar依赖于某些第三方jar包的不同版本,这时就会出现同时依赖用一个jar文件的不同版本,有时会有依赖冲突。解决方法就是配置排除依赖。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
注:exclusions是在某个具体依赖里面配置的,也就是说要找到需排除的jar包的依赖路径,这个可以在开发工具中查看pom.xml的依赖图。
- maven和pom.xml详解
- maven pom.xml详解
- maven POM.xml详解
- maven pom.xml详解
- maven POM.xml详解
- maven POM.xml详解
- maven POM.xml详解
- maven pom.xml详解
- maven pom.xml详解
- 【maven】 pom.xml详解
- maven pom.xml详解
- maven pom.xml详解
- maven pom.xml详解
- maven pom.xml详解
- maven POM.xml详解
- maven pom.xml 详解
- maven pom.xml详解
- maven pom.xml详解
- 实现生产环境的监控&管理
- oracle 一致性读的研究
- Node JS API (一)
- Servlet技术浅析(五)之-----ServletConfig接口和ServletContext接口
- H5页面中隐藏键盘
- maven和pom.xml详解
- impala-kudu安装
- PHP扩展sockets和Fileinfo , 实现发送邮件
- 基于maven构建spring项目报错_NestedRuntimeException cannot be resolved
- 临界区,互斥量,信号量,事件的区别
- php redis 实例及详细注释
- oracle查询结果处理(转)
- php导出excel表格部分代码
- 使用storm trident消费kafka消息