Java项目管理工具-Maven
2015年11月13日
1 目标:简单的管理项目的工具,不但具备ant那样单个工程生命周期管理,还能管理多个工程及其关系和版本的管理。
2 原理:基于Ant管理工程生命周期,基于POM模型管理多个工程(基于工程坐标)。
工程生命周期管理:继承Ant,Ant的工程管理方式在Maven中基本有效。
工程关系管理:POM提示了工程坐标概念,使用项目id+工程id+包类型+版本号确定工程的依赖关系的瞬时状态。每个坐标可以追溯到各个工程的依赖关系及版本,从而唯一确定项目的状态。多个工程可以共享各种库,只要指定坐标就可以获取。
版本库:各种版本的库存在于Maven的仓库(Repository)中,常用库一般在网络上,也可以用于本地,不常用的库可以在本地生成。
3 流程: 安装Maven,生成项目,编写业务,打包,使用。
参考:
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
3.1 安装:下载,配置
3.1.1安装(Windows):下载Maven,解压后设置Maven的环境变量。
Maven的安装路径:M2_HOME
Maven的执行路径:M2=%M2_HOME%\bin
注意:Maven需要JAVA_HOME环境变量。
测试安装结果:mvn –v
参考:http://maven.apache.org/install.html
3.1.2安装(Linux):下载Maven,解压后设置Maven的PATH路径。
参考:http://maven.apache.org/install.html
测试安装结果:mvn –v
[sf@localhostjar]$ exportPATH=/usr/java/apache-maven-3.3.3/bin:$PATH
[sf@localhostjar]$ echo $PATH
/usr/java/apache-maven-3.3.3/bin:/usr/java/apache-tomcat-8.0.24/bin:/usr/lib/jvm/jdk1.7.0_80/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/sf/bin
[sf@localhost jar]$ mvn -v
Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home:/usr/java/apache-maven-3.3.3
Java version:1.7.0_80, vendor: Oracle Corporation
Java home:/usr/lib/jvm/jdk1.7.0_80/jre
Default locale:en_US, platform encoding: UTF-8
OS name:"linux", version: "2.6.32-431.el6.x86_64", arch:"amd64", family: "unix"
[sf@localhostjar]$
3.2 生成项目:使用mvn命令行指定各个属性,自动生成pom和相关文件。
注意:第一次使用时会从网络下载相关的jar包和pom。
mvnarchetype:generate -DgroupId=com.mycompany.mvntest -DartifactI
d=helloworldtest-Dpackage=com.mycompany.mvntest.helloworld -Dversion=1.0-SNAPSH
OT
3.3 编写业务:项目自动生成app.java,从此位置开始进行业务编写。
//app.java
packagecom.mycompany.mvntest.helloworld;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World,Maven!");
}
}
3.4 打包:mvnpackage
切换到目标工程下(具有pom.xml的目录),执行mvn package 命令,将工程打包(默认是jar)。
工程将进行编译,并在target目录下生成jar和各种相关文件。
3.5 使用:使用java调用生成的jar包。
java -cptarget/helloworldtest-1.0-SNAPSHOT.jar com.mycompany.mvntest.helloworld.App
4 方法: Maven使用
参考:http://www.iteye.com/topic/1123221
4.1 组织方式: pom.xml
参考:http://blog.csdn.net/longeremmy/article/details/9670619 http://www.iteye.com/topic/1123232 http://baike.baidu.com/subview/175698/13751348.htm#viewPageContent
详细参见:http://www.cnblogs.com/qq78292959/p/3711501.html
根节点:project。
pom版本:modelVersion。
工程坐标:groupId,artifactId,packing,version。
依赖项:dependencies。
项目的其它属性:名称name,网址url,描述description等。
作用范围:scope,默认是compile。用于指定依赖的classpath作用于complie,test或runtime。provided表示作用于compile和test。system与provided范围相同,但可以引用环境变量(不可移植,不推荐)。
//pom.xml
<projectxmlns="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.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.mvntest</groupId>
<artifactId>helloworldtest</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>helloworldtest</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4.2 工程坐标:项目id:工程id:包类型:版本号。
在pom.xml中表现为各个节点。
<groupId>com.mycompany.mvntest</groupId>
<artifactId>helloworldtest</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
版本号:主版本.次版本.增量版本-版本类型。
参考:http://juvenshun.iteye.com/blog/376422
4.3 生命周期:mvn进行项目管理的过程
主要包括default(默认过程,编译,打包等),clean(清理项目生成),site(站点生成)。
参考:http://www.iteye.com/topic/1123221 http://www.iteye.com/topic/1123228
4.3.1清理mvn clean:将mvn生成的编译、打包等内容全部删除(保留生成的内容)。
4.3.2编译mvn compile:编译项目,生成classes。
4.3.3测试mvn test:调用junit执行测试。
4.3.4打包mvn package:执行编译、测试、打包工作。
4.3.5安装包到本地仓库mvn install:执行编译、测试、打包、安装工作。将项目生成的jar安装到本地仓库中,可以被其它工程使用。
4.3.6安装到远程仓库mvn deploy:与install相同的过程,但被安装到远程仓库。
如果版本类型为SNAPSHOT则提交到快速库。
如果版本类型为RELEASE则提交到发布库。
4.3.7启动tomcat服务:mvntomcat:run
4.3.8清除以前的包后重新打包,跳过测试类:mvn clean package-Dmaven.test.skip=true
4.3.9mvn eclipse:eclipse 生成eclipse项目文件
4.4 任务:插件和目标。
插件指一个实用程序,如javac,jar等。
目标指一个实用程序的特定处理方式,如archetype的generate,create等。
可以指定参数。
mvn archetype:generate-DgroupId=com.mycompany.mvnt
est -DartifactId=helloworldtest -Dpackage=com.mycompany.mvntest.helloworld-Dver
sion=1.0-SNAPSHOT
4.5 帮助:mvnhelp:describe –Dplugin=插件名 【–Dgoal=目标名】 【–Ddetail】。
mvn help:describe-Dplugin=compiler -Dgoal=compile –Ddetail
4.6 依赖关系:通过指定一个dependency(指定工程坐标)来指定依赖的工程。
依赖可以传递,删除、添加等。
类型由type指定(对应坐标的packing)。
可以指定scope。
参见:http://www.iteye.com/topic/1123232
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
4.7 仓库:是指用于共享的程序存储位置。
Maven具有远程和本地两种仓库。
远程仓库位于网络中,用于共享。
本地仓库是本地使用的所有程序。Windows下位于C:\Users\用户名\.m2\repository,Linux下位于:~/.m2/repository。
设置本地仓库位置:
设置远程仓库位置:
4.8 全局设置文件:settings.xml
位于Maven安装目录conf目录中。这是个模板位置,应该将其copy到本地仓库中(用户名/.m2/目录中,与repository同级)才能起作用。
可以指定本地仓库位置,服务器,镜像,代理等。
设置方法参见:http://www.cnblogs.com/shipengzhi/archive/2011/05/16/2047692.html
参考:
http://blog.sonatype.com/2010/11/what-to-do-when-nexus-returns-401/#.VkqiY6bvOUk
4.8.1查看当前settings:mvnhelp:effective-settings.
参考:http://blog.sonatype.com/2010/11/what-to-do-when-nexus-returns-401/#.VkqiY6bvOUk
5 Maven的Eclipse使用
注意:Eclipse 4.5自带Maven插件。
注意:linux与windows操作相同。
5.1 JavaApplication
5.1.1下载M2Eclipse插件:Help-》Eclipse Marketplace,下载Maven Integration forEclipse。
5.1.2创建Maven项目:File->New->Others-》Maven Project。
5.1.3选择项目类型:quickstart。所有的类型都列出来,可以查看不同的类型。