我们在进行java项目开发时,尤其是SSH等框架整合的项目时,最头痛的就是jar包的冲突等问题,怎样解决该问题并进行良好的项目构建呢?apache的Maven能够帮我们解决以上的问题。
Maven 是一个项目管理和构建自己主动化工具。可是对于我们程序猿来说。我们最关心的是它的项目构建功能。
首先:从Maven官网(http://maven.apache.org/download.cgi;)下载maven。并解压缩。
其次:配置maven的环境变量:M2_HOME,右键我的电脑-》环境变量-》用户变量-》创建->M2_HOME,value:就是你的maven的bin所在文件夹。并把该变量加入到path中。
最后:測试mavne是否安装成功。在CMD命令中键入 mvn -v 命令:假设出现例如以下所看到的。就表示安装成功mavne
Maven 使用惯例优于配置的原则 。它要求在没有定制之前,全部的项目必须遵循例如以下的结构:
app
--pom.xml
--src
--main
--java
--package...
--class
--test
--java
--package..
--class
pom.xml文件时项目构建文件(Project Object Model):其内容例如以下:
<?xml 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>org.oracle.maven</groupId> <artifactId>maven-hello</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
以上文件文件里 modelVersion是模块版本号,对于Maven2以后版本号此处都是4.0.0, <groupId>:表示项目属于哪一个组。此处一般都是相应公司。<artifactId>是模块(子项目)的唯一名称,<version>表示当前的版本号(SNAPSHOT:表示快照版本号。測试)<name>用于说明项目。
依据以上结构创建好项目结构:
以上的main中存放项目(模块) 的主代码,test中用与保存測试代码,在main中的winstar包下创建一个java类:代码例如以下:
<code>
package org.winstar;
public class HelloMaven{
public String sayHello(){
return "Hello Maven";
}
}
</code>
回到CMD命令中,运行mvn
compile(编译命令) 会看到例如以下:
BUILD SUCCESS:构建成功,同一时候在项目中出现了一个target目录在target下有classes和maven-status两个目录,我们的HelloMaven.class文件mavne已经帮我们自己主动编译完毕并保存在classes目录中。
在test->java->org->winstar包下创建例如以下測试类,代码例如以下:
<code>
package org.oracle.domain;
import org.junit.*;
import static org.junit.Assert.*;
public class HelloTest{
@Test
public void test(){
Hello hello=new Hello();
String str=hello.sayHi();
assertEquals(str,"hello");
}
}
</code>
保存pom.xml文件后。运行mvn
test, maven会自己主动从网上(中央仓库。这个后头会讲)下载所需的jar。并保存的本地的(仓库:默认在C:\Users\Administrator\.m2\repository文件夹下)硬盘上。我们能够查看该文件夹,发现多了个junit的文件夹,当中已经包括了jar文件。
运行安装,将项目生成jar,在CMD中运行 mvn clean install 命令(clean用于清空target文件夹),会看到例如以下:
mavne会把项目生成hello-mavne-0.0.1-SNAPSHOT.jar文件,当中 hello-maven是<artifactiId>的名称。同一时候,这个jar文件会保存到本地仓库中。
我们把这个jar文件 仅仅需通过项目的pom.xml文件导入就可以。
我们完毕第一maven项目后。基本了解了maven的项目结构和两个基本命令:mvn compile(编译) mvn test(測试),并且maven的项目须要网络的支持(须要从中央仓库中下载jar文件)。那么maven究竟能给我们带来什么优点(怎样实现项目、模块的自己主动构建以及管理呢)?接下来我们来做第二个实验,參考第一个maven项目结构,建立一个新的目录(项目,其层次结构与第一个同样)。
在model中创建一个java类:
<code>
package org.winstar.model;
public class World{
public String show(){
HelloMaven hm=new HelloMaven();
return hm.sayHello();
}
}
</code>
首先我们的通知maven要导入的模块名称。mvn通过GAV(GroupId,ArtifactId,Version),简称“坐标” 来定位项目,并建立项目的依赖关系(依赖关系是maven中的一个重点,这个后面会讲到)。在新创建的项目的pom.xml文件里加入例如以下代码:
<? xml 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>org.winstar.maven.ch002</groupId> <artifactId>maven_002</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.winstar.maven.ch001</groupId> <artifactId>hello_maven</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
编辑并保存该文件,回到cmd中运行例如以下命令:
至此,我们的项目成功执行(并导入第一个项目模块),有点感觉啦吧。。!
通过以上的两个实验。我们发现mavne的项目架构。那么我们每次都须要这么麻烦的去手动的创建文件文件夹吗(Eclipse的mavne支持和sts的mavne支持。后面会讲),不须要的。我们仅仅要运行 mvn archetype: generate。 maven会自己主动依据骨架来完毕项目的创建。
首先我们创建一个目录,然后进入该目录,并运行mvn archetype:generate
等待。
。。
提示输入groupId.artifactId:
version package 最后键入y完毕项目的构建,看我们的目录吧!自己主动完毕。太给力啦。
我们会看到mavne会自己主动联网下载所需的jar文件资源(同一时候自己主动保存到本地仓库中,下次就不需从网上去下载了。
本地仓库能够在maven的文件夹中有个conn的文件夹,该文件夹下有一个settings.xml文件改动成自己的文件夹就可以)。
mvn archetype:generate命令会自己主动创建maven项目架构(包含pom.xml和各个目录)这个命令就是在Eclipse中创建mavne项目时用到的。好了简单总结一下mvn的基本命令:
1:mvn compile--->编译
2:mvn test--->測试(会自己主动生成測试报告)
3: mvn clean package--->将项目打包(clean:清空target文件夹)
4:mvn clean install--->安装(会依据artifactiId和version生成一个jar,并保存到本地的仓库中)
5:mvn archetype: generate---->(依据archetype:骨架)自己主动创建mavne项目 。