Java项目管理工具-Maven
2015年11月13日
工程生命周期管理:继承Ant,Ant的工程管理方式在Maven中基本有效。
工程关系管理:POM提示了工程坐标概念,使用项目id+工程id+包类型+版本号确定工程的依赖关系的瞬时状态。每个坐标可以追溯到各个工程的依赖关系及版本,从而唯一确定项目的状态。多个工程可以共享各种库,只要指定坐标就可以获取。
版本库:各种版本的库存在于Maven的仓库(Repository)中,常用库一般在网络上,也可以用于本地,不常用的库可以在本地生成。
参考:
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
Maven的安装路径:M2_HOME
Maven的执行路径:M2=%M2_HOME%\bin
注意:Maven需要JAVA_HOME环境变量。
测试安装结果:mvn –v
参考:http://maven.apache.org/install.html
参考: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]$
注意:第一次使用时会从网络下载相关的jar包和pom。
mvnarchetype:generate -DgroupId=com.mycompany.mvntest -DartifactI
d=helloworldtest-Dpackage=com.mycompany.mvntest.helloworld -Dversion=1.0-SNAPSH
OT
//app.java
packagecom.mycompany.mvntest.helloworld;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World,Maven!");
}
}
切换到目标工程下(具有pom.xml的目录),执行mvn package 命令,将工程打包(默认是jar)。
工程将进行编译,并在target目录下生成jar和各种相关文件。
java -cptarget/helloworldtest-1.0-SNAPSHOT.jar com.mycompany.mvntest.helloworld.App
参考:http://www.iteye.com/topic/1123221
参考: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
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> 在pom.xml中表现为各个节点。 版本号:主版本.次版本.增量版本-版本类型。 参考:http://juvenshun.iteye.com/blog/376422 主要包括default(默认过程,编译,打包等),clean(清理项目生成),site(站点生成)。 参考:http://www.iteye.com/topic/1123221 http://www.iteye.com/topic/1123228 如果版本类型为SNAPSHOT则提交到快速库。 如果版本类型为RELEASE则提交到发布库。 插件指一个实用程序,如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 mvn help:describe-Dplugin=compiler -Dgoal=compile –Ddetail 依赖可以传递,删除、添加等。 类型由type指定(对应坐标的packing)。 可以指定scope。 参见:http://www.iteye.com/topic/1123232 Maven具有远程和本地两种仓库。 远程仓库位于网络中,用于共享。 本地仓库是本地使用的所有程序。Windows下位于C:\Users\用户名\.m2\repository,Linux下位于:~/.m2/repository。 设置本地仓库位置: 设置远程仓库位置: 位于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 参考:http://blog.sonatype.com/2010/11/what-to-do-when-nexus-returns-401/#.VkqiY6bvOUk 注意:Eclipse 4.5自带Maven插件。 注意:linux与windows操作相同。 在工程目录下出现target,并生成相应的jar包。 参考:http://www.iteye.com/topic/1123225 与JavaApplication相似:参见Java Application 不要直接导入eclipse工作,无法正确处理依赖关系。 如果系统中有JAVA_HOME,可以不用配置。 如果没有,则需要指定conf/wrapper.conf中的wrapper.java.command。 参考:http://blog.csdn.net/wang379275614/article/details/43940259 登录网址:http://localhost:8081/nexus/index.html#welcome 使用admin/admin123登录,可以创建自定义版本库。 //settings.xml部分 。。。 。。。 使用MavenDemo,参见JavaApplication 注意:pom中的id要与server的id相同。 参考:http://blog.csdn.net/god_wot/article/details/8209223 软件将被提交到sonatype-work\nexus\storage\snapshots\中对应的目录。 packagelee.mvn.MavenDemo; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "HelloWorld,Maven Linux!" ); } public static int add(int a,int b){ return a+b+3; } } xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> 参见JavaApplication 注意:如果依赖的当前版本在本程序中,则出现程序文件夹。否则直接依赖jar。 //MvnClient/pom.xm xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> package lee.mvn.MvnClient; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "HelloWorld!" ); int add=lee.mvn.MavenDemo.App.add(3, 5); System.out.println("add="+add); } } 参见:http://blog.csdn.net/longeremmy/article/details/9670619 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"> scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web 4.2 工程坐标:项目id:工程id:包类型:版本号。
4.3 生命周期:mvn进行项目管理的过程
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相同的过程,但被安装到远程仓库。
4.3.7启动tomcat服务:mvntomcat:run
4.3.8清除以前的包后重新打包,跳过测试类:mvn clean package-Dmaven.test.skip=true
4.3.9mvn eclipse:eclipse 生成eclipse项目文件
4.4 任务:插件和目标。
4.5 帮助:mvnhelp:describe –Dplugin=插件名 【–Dgoal=目标名】 【–Ddetail】。
4.6 依赖关系:通过指定一个dependency(指定工程坐标)来指定依赖的工程。
4.7 仓库:是指用于共享的程序存储位置。
4.8 全局设置文件:settings.xml
4.8.1查看当前settings:mvnhelp:effective-settings.
5 Maven的Eclipse使用
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。所有的类型都列出来,可以查看不同的类型。
5.1.4设置工程坐标
5.1.5编写业务:自动生成app.java
5.1.6运行:RunAs-》JavaApplication
5.1.7打包:RunAs->Maven Build->package
5.1.8使用:使用Java运行,结果与Maven命令相同。
5.2 Java WebApplication
5.2.1选择项目类型:web app。所有的类型都列出来,可以查看不同的类型。
5.2.2使用时使用Run On Server可以看到主页面。
5.3 导入Maven项目:File->Import->选择目录。
6 Maven服务器搭建-Nexus
6.1 目标:建立Maven的私有仓库。可以代理公共仓库,可以读写本地软件。
6.2 原理:发布私有的仓库网站。
6.3 流程:安装Nexus,启动Nexus,配置Maven,配置POM,提交软件。
6.3.1安装:下载Nexus,解压后有两个文件夹。nexus是软件,work是仓库位置。
6.3.2启动:在bin/jsw下找到对应的系统。启动console-nexus.bat。
6.3.3配置Maven:copyMaven安装目录下conf/settings.xml到本地库.m2/目录中。添加nexus的版本库地址。
6.3.4配置pom.xml:
6.3.5提交:mvn deploy
6.3.6使用库依赖:在pom中使用指定的工程坐标
6.3.6.1 修改MavenDemo程序:添加add静态函数。
6.3.6.2 修改MavenDemo的版本,并Deploy:
6.3.6.3 新建MvnClient程序
6.3.6.4 添加MavenDemo工程依赖:
6.3.6.5 使用MavenDemo程序
6.4 方法:Nexus。
6.5 示例:
7 示例:
8 附录
8.1 POM详解