在官网上下载maven的包http://maven.apache.org/download.cgi
下载压缩包apache-maven-3.3.9-bin.zip
在环境变量中新建变量:
M2-HOME=D:apache-maven-3.3.9-binapache-maven-3.3.9
配置path,添加路径
path=D:apache-maven-3.3.9-binapache-maven-3.3.9in
然后再cmd中输入命令:mvn -v 可以查看maven的版本
现在就已经安装成功啦!
mvn的一些指令:
mvn compile 编译
mvn test 编译并测试
mvn clean 清空生成的文件
mvn package 打包
mvn install 是把打出的包装载到本地仓库
pom.xml文件
<?mxl 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.xidian.test</groupId>
<artifactId>first_maven_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
GroupID是项目组织唯一的标识符,实际对应Java的包的结构
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
在另一个项目中引用前一个模块的包。只需要加入一个<dependency>
同时 mvn install前一个模块将其打包装载到本地仓库。
<?mxl 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.xidian.test2</groupId>
<artifactId>second_maven_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>com.xidian.test</groupId>
<artifactId>first_maven_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
maven会现在本地仓库中找文件,如果没有找到就到网络中的中央仓库汇总去找。
本地仓库的位置:C:UsersDELL.m2 epository
修改默认本地仓库的位置:apache-maven-3.3.9-binapache-maven-3.3.9confsettings.xml
在apache-maven-3.3.9-binapache-maven-3.3.9libmaven-model-builder-3.3.9.jar中的
pom-4.0.0.xml文件中有中央仓库的地址
https://repo.maven.apache.org/maven2/
eclipse中使用maven:
在eclipse中配置自己安装的maven,不用eclipse自带的。
然后更改User Setting配置:
创建一个maven Project
archtetype是maven的骨架,这里选择quickstart
输入项目名称和模块名称:
生成的文件结构:
<scope>指定依赖的范围:
1.test 是指只在测试范围内有效,编译和打包的时候不会使用这个依赖。
如junit包,dbunit包,打包之后对应用没有作用且影响加载速度。
且只能作用于src/test中。
2.compile(默认)
编译范围内有效,在编译和打包的时候都会讲依赖加载进去。
3.provided(已提供范围) 只在编译和测试的时候有效,最后打包成war包的时候不会加入。
provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,
你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;
这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。
4.runtime(运行时范围)
依赖在运行和测试系统的时候需要,但在编译的时候不需要。
如驱动实现。jdbc。
maven的依赖特性:
依赖会传递,对于依赖的传递问题,主要针对的是compile作用域传递,test域不会传递
间接依赖的冲突问题:
如果层级不一样:
假设A-->包A-->包B2.0
B-->包B1.0
C-->A B
那么会选择依赖层级少的包1.0
如果依赖的层级一样:
假设A-->包1.0
B-->包2.0
C-->A B
那么C中对包的依赖会选择先在依赖声明中配置的那个。
参考学习视频:
http://www.icoolxue.com/album/show/45/