1、POM
(1)概念:
项目对象模型(Project Object Model),每一个maven项目都要提供pom.xml
(2)POM的四个部分:
a、POM Relactionships项目间关系
坐标:groupid组、artifactID标识、version版本号(唯一标识项目在仓库中的位置)
<groupId>pers.zhb</groupId> <artifactId>MyMaven</artifactId> <version>1.0-SNAPSHOT</version>
依赖:dependencies当前项目依赖哪些项目(通过依赖导入jar包)
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> </dependency> </dependencies>
多模块和继承:modules多模块,parent继承(使用多模块和继承对整个项目进行拆分)
b、Project Information项目信息
名称:name
描述:description
c、Bulid Settings(项目构建时的相关配置)
属性信息:properties
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties>
打包方式:packaging选择打包方式,jar包、war包、pom
<packaging>war</packaging>
构建相关配置:bulid
<build> <finalName>MyMaven</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8888</port> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <target>1.8</target> <source>1.8</source> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </pluginManagement> </build>
报告相关配置:reporting
d、构建环境相关配置(Bulid Environment)
profiles:使用(项目移植)
(3)有效POM、自定义POM和超级POM
自定义POM:Maven的所有操作都是基于插件的,自定义pom.xml没有定义插件,但是能运行test,所以项目运行时生效的不是自定义POM,而是有效POM
有效POM:在项目运行时生效的POM,有效POM=自定义POM+超级POM
超级POM:超级POM(如:编译、测试插件,虽然未定义但是可以使用)在Maven环境中,所有定义的pom.xml继承超级POM
2、坐标和依赖
在pom.xml里面可以通过<dependencies>标签配置项目的依赖(导入jar包),通过依赖目标项目的坐标,从仓库中找到项目(也就是说只要知道坐标就能获取到jar包)
(1)获取坐标的方式
a、网站搜索
http://search.maven.org/
http://mvnrepository.com/
b、使用Maven插件的索引功能
(2)依赖
当我们导入一个jar包,同时会自动导入依赖的jar包
(3)依赖的属性
坐标:导入一个jar包依赖,必须要素
<groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version>
依赖项目类型:type,默认值为jar
optional:标记依赖是否是可选的,如果A依赖B,B又依赖C,那么A依赖于C就可以设置为可选的
exclusions:排除传递依赖,解决间接依赖的jar包冲突的问题
scope:jar包的以来范围,决定jar包在什么情况下生效
<scope>provided</scope>
(4)传递性依赖
a、传递性依赖
b、依赖调节
B可以直接依赖于G,亦可以先依赖于C,C再依赖于G,这样就会出现一个问题就是G的版本不一致(图中是一致的),如果导入不同的版本的jar包会出现问题
调解原则(只对传递依赖有效):
路径近者优先
第一声明者优先