1、什么是maven:
Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理。
是一种自动化管理的工具。主要的功能就是可以管理jar包
是apache下的一个产品。
解决的项目的问题:
a.如果有好几个项目,这好几个项目中,需要用到很多相同的jar包,
可以只建立一个仓库来解决。
b.测试方法可以全部运行。
c.把一个模块的功能放入到仓库中。
2、maven的安装:
从http://maven.apache.org/下载,
下载完解压到你指定的路径
把bin路径添加到PATH路径下
运行mvn -v 检查是否安装成功。
我下载的是 apache-maven-3.5.0-bin.zip
3、maven的仓库:
建一个本地仓库
maven默认的仓库是在c盘 例如我的:C:\Users\Administrator.PC-20140217OXFV\.m2
指定自己的仓库:
把D:\Install_Program\maven\apache-maven-3.5.0\conf下面的settings.xml文件复制到上述的路径中
修改settings.xml文件
<localRepository>D:/Install_Program/maven/myRepository</localRepository>
4、maven的约定:
我们使用maven,在项目文件放置需要遵守maven的约定
src/main/java 存放项目的java文件
src/main/resources 存放项目的资源文件,如spring,hibernate的配置文件
src/test/java 存放所有的测试的java文件
src/test/resources 存放测试用的资源文件
target 项目输出位置,自动生成
pom.xml 文件,很重要的配置文件
maven的运行不需要myeclipse,我们为了方便
5、maven的命令:
第一次使用mvn clean ,mvn compile 网络不好的情况下会等蛮久的,主要是下载一些jar包到本地的仓库。
我们在myeclipse中按照上面的格式创建一个项目
HelloMaven
src/main/java
com.example.maven
Hello.java
src/main/resources
src/test/java
com.example.maven
HelloTest.java
src/test/resources
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId> //这个名称就是之后你放到本地仓库中的 下一级目录
<artifactId>hello</artifactId> //这个名称就是本地仓库中 com.example 下一级目录
<version>0.0.1-SNAPSHOT</version> // hello + 0.0.1-SNAPSHOT版本号,就成了你的jar包的名称
<name>hi</name>
<description/>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 没有用到依赖库,暂时注释掉
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
</dependencies>
-->
</project>
mvn clean:清除maven工程
我们在cmd中,cd到工程目录下面,执行mvn clean就会把target的目录给清除掉
mvn compile:编译工程
成功后我们在cmd窗口中可以看到 [INFO] BUILD SUCCESS 的提示
并且在工程目录生成target目录,里面会生成class文件
mvn test:执行测试目录里面的所有测试方法(只会执行有@Test标记的方法)
mvn package:将工程打包成一个jar
例如上面的工程就在target目录下生成了一个 hello-0.0.1-SNAPSHOT.jar
mvn install:将我们的jar包放到maven的本地仓库中:
例如:在D:\Install_Program\maven\myRepository\com\example\hello\0.0.1-SNAPSHOT 中就有我们的jar包
pom.xml文件就变成了 hello-0.0.1-SNAPSHOT.pom文件,内容是一样的。
6、maven的依赖:
有的时候我们的工程需要依赖其他的工程。那么我们可以在xml中配置依赖
我们添加依赖的时候注意,在本地仓库中必须要有这个工程的jar包。是我们自己的工程我们就 mvn install 就放进去了。
例如我们新建一个工程 HelloFriend
com.example.maven 包
public class HelloFriend {
public void helloFriend(){
System.out.println("hello friend");
Hello hello = new Hello(); //我们使用上面工程的Hello类,eclipse报错不用管
hello.hello();
}
}
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.example</groupId>
<artifactId>helloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description />
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 加的依赖的配置 -->
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
我们cd到工程目录下,mvn compile 可以编译成功。
说明我们的依赖配置OK。
7、maven依赖传递性:
比如我们现在有个工程HelloSuperFriend
我们配置依赖了上面的HelloFriend,默认Hello工程的类也可以使用,就相当于也使用了Hello工程的依赖。
8、maven的jar包继承:
在基类的工程中配置:
<groupId>com.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> //我们配置了pom这个属性后,使用mvn compile 是不会生成target目录
我们mvn install 命令后,会把当前的xml配置重名为一个pom文件存到本地仓库中,并没与jar文件
例如我们想继承Hello工程
我们只要配置:
<parent>
<groupId>com.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
这样我们就可以在这个工程中使用HelloMaven工程中的Hello类了
关键了解 <parent> 属性和 <packaging> 的设置
9、maven的坐标:
我们如何来找一个jar包
我们只需要确定这3个属性值就可以确定了,你可以在本地仓库中按照这个路径找。
<groupId>com.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
网上提供的maven支持工程都会提供坐标的,所以我们可以根据坐标,联网就可以自动下载使用jar包
10、maven的仓库:
local repository 本地库
center repisitory 中央库,在互联网上的url
私服:就是war包,web工程,放到tomcat中,
我们可以在settings.xml的配置中配置mirror
就可以把私服配置到我们自己服务器,就从私服中查找jar包
maven的执行原理:
maven根据pom.xml文件,把它转化成项目对象模型(POM)
这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。
在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情(插件在本地库 org/apache/plugins 中)。
而这些plug-in会产生一些中间产物。
11、maven与myeclipse的整合:
myeclipse里面自带有maven,但是我们最好把我们自己的maven导进来。
一些简单的截图
myeclipse创建一个maven工程
创建完成之后,右击工程就可以执行maven的命令了,类似于命令行的
mvn compile 、mvn install …可是我们发现没有compile这个选项,于是我们可以这样
创建工程的时候肯定会遇到各种的报错,找不到jar什么的,我们一般使用依赖,使用maven自己在网上更新就ok
解决方法:在一个pom.xml写好依赖
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
</dependency>
执行:mvn install 命令,就可以直接更新了
自己已通过这个方法解决了好几个报错问题。
eclipse中整合maven的好处,我们在pom.xml文件中加了一个dependency ,
在Maven Dependencies中就可以看到jar包直接就引进来了,很神奇,方便。
还遇到一个问题,一直提示(网上找到说myeclipse2014和maven3.5不兼容)
我的解决方法是:
当然你也可以选择低版本。我没有选择低版本,还是用maven 3.5
M2_HOME: D:\Install_Program\maven\apache-maven-3.5.0
-Dmaven.multiModuleProjectDirectory=$M2_HOME
成功运行: