Maven
maven具体是什么:
Maven是跨平台的项目管理工具, 主要服务于Java平台的项目构建、依赖管理和项目信息管理。
项目构建完整的过程:
使用maven后只需要一步即可完成上述构建过程。
好处2,依赖管理:
正常的项目我们处理jar包很少会去关心具体的版本号,有时当前用到了某个功能去找jar包一般都是用最新的,这样当前可能没问题,实际上这给我们的项目带来了极大的安全隐患和风险,而使用maven后,这些jar包之间的依赖关系就能够清晰的看到了,为什么要用这些jar包,它能自动管理各个jar包之间版本的依赖关系。
好处3,构件化编程:
每个项目的代码的重用率高,将原来的大工程分成很多个小工程,通过maven去构件组装,用到什么功能随时插拔使用,提高开发成本。
在maven的角度来看,简单的来讲每个jar包就相当于一个构件化的组件。
maven安装过程:
1.检查jdk安装的情况(要1.6以上版本):
Echo %JAVA_HOME% 注:验证是否设置java环境变量
Java -version 注:验证java版本
2.对apache-maven-3.0.3-bin.zip进行解压缩,例如解压到如下目录(解压目录最好不要有中文字):
3.设置系统环境变量,MAVEN_HOME
4.设置环境变量Path,将%MAVEN_HOME%\bin加入Path中,一定要注意要用分号;与其他值隔开
5.验证安装是否成功,打开cmd窗口,敲入mvn –v 查看
一般配置完上述步骤即可运行maven了,但是部分人可能会出现内存溢出的一个错误,原因已不需解释,肯定是内存不够了呗,这时我们需要设置一下maven使用的内存,
设置MAVEN_OPTS环境变量:-Xms128m -Xmx512m
注意:上面设置的具体是什么意思呢,是maven在java虚拟机中占用堆的大小,-Xms是设置堆初始的大小,-Xmx是设置堆的最大值。
有兴趣的朋友可以参考这个网址去学习一下:http://unixboy.iteye.com/blog/174173/
针对不同用户的配置方式:
直接复制一份E:\apache-maven-3.2.5\conf\settings.xml这个文件到对应的用户(例如:administrator,对应目录是:C:\Users\Administrator\.m2)下即可,这样就表示这个用户的maven配置信息就走这个文件了。
注意:E:\apache-maven-3.2.5\conf\settings.xml默认是全局用户的配置信息。
Maven的约定:
我们在使用maven的时候一定要遵循maven的这个约定,因为凭什么说这个项目是maven项目呢就是因为有一个这样的约定,所以只要按照这个约定做的项目,那它就是个maven项目,正如web项目一样,是约定俗成的东西。
src/main/java | 存放项目的.java文件 |
src/main/resources | 存放项目资源文件,如spring,hibernate配置文件 |
src/test/java | 存放所有测试.java文件,如JUnit测试类 |
src/test/resources | 测试资源文件 |
target | 项目输出位置 |
pom.xml | 必须的maven特色文件 |
动手实践第一个maven项目:
第1步. 首先建立Hello项目同时建立Maven约定的目录结构
Hello
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
第2步:在项目Hello根目录建立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>cn.cfs.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> </project>
第3步:在src/main/java/cn/cfs/maven目录下新建文件Hello.java
package cn.cfs.maven; public class Hello { public String sayHello(String name){ return "Hello "+name+"!"; } }
第4步:在/src/test/java/cn/cfs/maven目录下新建测试文件HelloTest.java
package cn.cfs.maven; import org.junit.Test; import static junit.framework.Assert.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello("litingwei"); assertEquals("Hello litingwei!",results); } }
第5步:
a)打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化
b)cmd 中继续录入mvn clean命令,然后再次查看根目录变化
c)cmd 中录入 mvn clean compile命令, 查看根目录变化
d)cmd 中录入 mvn clean test命令,查看根目录变化
e)cmd 中录入 mvn clean package命令,查看根目录变化
f )cmd 中录入 mvn install命令,查看根目录变化
动手实践第二个maven项目:
第1步:复制一份hello项目更名为hellofriend,要求约定的结构和hello一样,里面的类文件可以删除
第2步:在src/main/java/cn/cfs/maven目录下新建文件HelloFriend.java
package cn.cfs.maven; public class HelloFriend { public String sayHelloFriend(String name) { Hello h=new Hello(); String str=h.sayHello(name)+"引用helloFriend的方法"; return str; } }
第3步:在项目Hello根目录建立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>cfs.maven</groupId> <artifactId>HelloFriend</artifactId> <version>0.0.1-SNAPSHOT</version> <name>HelloFriend</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>cfs.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> </project>
第4步:观察一下你的maven仓库是否生成了对应的jar文件
可以看到项目与项目之间的引用主要是通过maven的依赖管理去实现的,那么maven的概念模型是什么样的呢?
Maven概念模型:
可以通过上面的图片可以清晰的看出来maven是通过插件去实现每一步的操作,那么他的插件放到哪里了呢?
插件路径:C:\Users\Administrator\.m2\repository\org\apache\maven\plugins
放一张图片对比一下,我们敲的命令既是这些插件的名称,通过命令找到这些插件项目,本质上也是java些的程序。
Maven的坐标讲解:
我们的仓库一般都很大,里面有很多的jar包,maven为更快更有效的去定位实际项目中用到的jar,通过4个维度去快速锁定jar包。
groupId:定义当前Maven项目隶属项目,如果是单独的项目一般填写的是主包名
artifactId:定义实际项目中的一个模块,如果是单独项目则是项目名或主类名
version>:定义当前项目的当前版本,顾名思义不用多解释了
packaging:定义该项目的打包方式,2种,不写该坐标默认是jar,通常web项目选择war包
上面的四种坐标标签是必须的。
dependencies:配置依赖的标签,所有的依赖标签都在这里配置。
dependency:配置具体依赖的标签,只能出现在dependencies标签里。
scope:范围,具体配置项请看下面的图片: