1.构建项目
2.依赖管理
3.脱离IDE对项目进行 编译、测试、打包、安装

4.版本规范

5.关于pom.xml
<scope>指定依赖作用范围
Maven提供了三种 classPath 分别是编译、测试、运行
例如要依赖JUnit包 ,JUnit只存在于测试的classPath中
在<dependency>中配置<scope></scope>
<scope></scope>中可写的值有6种,分别是:
compile:默认范围,编译测试运行都有效
provided:在编译和测试时有效 , 例如ServletAPI
runtime:在测试和运行时有效 ,例如JDBC驱动
test:只在测试时有效,例如 JUnit
system:在编译和测试时有效 ,但与本机系统相关联,可移植性差。例如关联本机的JAVA_HOME,移植到其他机器JAVA_HOME路径不一致会导致错误
import:导入的范围,它只使用在dependencyManagement中,表示从其他pom导入的依赖配置
Maven 传递依赖
传递依赖
如果 A构件 依赖 B构件
B构件 依赖 C构件
则 A构件 也依赖于 C构件
排除依赖
<exclusions>
<exclusion>
要排除构件的坐标
</exclusion>
<exclusions>
Maven 依赖冲突
依赖冲突
如A构件和B构件依赖了一个不同版本的相同构件 ,则产生了依赖冲突
依赖冲突的处理原则
1.短路优先
优先解析路径短的版本
例如 A -> B ->C -> X(jar)
A -> D ->X (jar)
优先解析路径短的版本
2.声明优先
如果路径长度相同,则谁先声明,先解析谁
1 Maven命令
1.1编译 mvn compile

会自动从本地仓库或中央仓库获取所需要的Jar包
1.2测试 mvn test

1.3打包 mvn package

可打包成 jar包(默认)war包,pom

1.4安装 mvn install (自动执行编译、测试、打包、安装(将打包后的jar包放置到本地仓库))


1.5 自动创建Maven目录结构 mvn archetype:generate
oa2项目





<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oracle</groupId>
<artifactId>oa2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>oa2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--oa2调用oa2里面的类-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>oa1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
编译后显示 BUILD SUCCESS则成功

2.Maven在Eclipse的配置
window -- Perferences -- Maven -- installations -- add 添加Maven Home,完成后,勾选新加的Maven

window -- Perferences -- Maven -- User settings -- 配置User Settings 指向Maven中 setttings.xml配置文件

创建Maven项目

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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zps</groupId>
<artifactId>oa1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>oa1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

package com.zps.oa1;
/**
* Hello world!
*
*/
public class HelloWorld
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
public String sayHello(String name) {
return name + " say hello";
}
}
package com.zps.oa1;
import org.junit.Assert;
import org.junit.Test;
/**
* Hello world!
*
*/
public class HelloWorldTest
{
@Test
public void satHelloTest() {
Assert.assertEquals("tom say hello", new App().sayHello("tom"));
}
}

oa2 依赖 oa1
oa1--->maven build

创建oa2项目

<dependencies>
<dependency>
<groupId>com.zps</groupId>
<artifactId>oa1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--
<exclusions>
<exclusion>
</exclusion>
</exclusions>
-->
</dependency>
</dependencies>
oa统一管理
<modules>
<module>../oa1</module>
<module>../oa2</module>
<module>oa3</module>
</modules>
<!--对依赖的版本进行管理,但并没有导入依赖-->
<dependencyManagement>
<dependencies>
<dependency>
...
</dependency>
</dependencies>
</dependencyManagement>
子类导入父类依赖不需要导入版本
oa1/oa2 继承父类依赖
<parent>
<groupId>com.zps</groupId>
<artifactId>oa</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
oa里面创建模块oa3

