Java项目管理工具-Maven

Java项目管理工具-Maven

[email protected]

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

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

 4.0.0

  com.mycompany.mvntest

 helloworldtest

 jar

 1.0-SNAPSHOT

  helloworldtest

 http://maven.apache.org

 

   

      junit

     junit

      3.8.1

      test

   

 

4.2 工程坐标:项目id:工程id:包类型:版本号。

在pom.xml中表现为各个节点。

 com.mycompany.mvntest

 helloworldtest

  jar

  1.0-SNAPSHOT

版本号:主版本.次版本.增量版本-版本类型。

参考: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

 

   

      junit

     junit

      3.8.1

      test

   

 

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。所有的类型都列出来,可以查看不同的类型。

 

5.1.4设置工程坐标

5.1.5编写业务:自动生成app.java

5.1.6运行:RunAs-》JavaApplication

5.1.7打包:RunAs->Maven Build->package

在工程目录下出现target,并生成相应的jar包。

 

5.1.8使用:使用Java运行,结果与Maven命令相同。

参考:http://www.iteye.com/topic/1123225

5.2 Java WebApplication

与JavaApplication相似:参见Java Application

5.2.1选择项目类型:web app。所有的类型都列出来,可以查看不同的类型。

5.2.2使用时使用Run On Server可以看到主页面。

5.3 导入Maven项目:File->Import->选择目录。

不要直接导入eclipse工作,无法正确处理依赖关系。

 

6 Maven服务器搭建-Nexus

6.1 目标:建立Maven的私有仓库。可以代理公共仓库,可以读写本地软件。

6.2 原理:发布私有的仓库网站。

6.3 流程:安装Nexus,启动Nexus,配置Maven,配置POM,提交软件。

6.3.1安装:下载Nexus,解压后有两个文件夹。nexus是软件,work是仓库位置。

如果系统中有JAVA_HOME,可以不用配置。

如果没有,则需要指定conf/wrapper.conf中的wrapper.java.command。

参考:http://blog.csdn.net/wang379275614/article/details/43940259

6.3.2启动:在bin/jsw下找到对应的系统。启动console-nexus.bat。

登录网址:http://localhost:8081/nexus/index.html#welcome

使用admin/admin123登录,可以创建自定义版本库。

 

6.3.3配置Maven:copyMaven安装目录下conf/settings.xml到本地库.m2/目录中。添加nexus的版本库地址。

//settings.xml部分

。。。

 

 

   

 

   

   

     nexus-release

     admin

     admin123

   

   

     nexus-snapshots

     admin

     admin123

   

 

 

 

 

   

 

。。。

6.3.4配置pom.xml:

使用MavenDemo,参见JavaApplication

注意:pom中的id要与server的id相同。

参考:http://blog.csdn.net/god_wot/article/details/8209223

     

          

                 nexus-release

                 Nexus ReleaseRepository

                 http://192.168.41.1:8081/nexus/content/repositories/releases

          

          

                 nexus-snapshots

                 Nexus SnapshotRepository

                 http://192.168.41.1:8081/nexus/content/repositories/snapshots

          

     

6.3.5提交:mvn deploy

软件将被提交到sonatype-work\nexus\storage\snapshots\中对应的目录。

6.3.6使用库依赖:在pom中使用指定的工程坐标

6.3.6.1  修改MavenDemo程序:添加add静态函数。

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;

    }

}

6.3.6.2  修改MavenDemo的版本,并Deploy:

      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

      4.0.0

 

      lee.mvn

      MavenDemo

      0.0.3-SNAPSHOT

      jar

 

      MavenDemo

      http://maven.apache.org

 

     

           UTF-8

     

 

     

          

                 junit

                 junit

                 3.8.1

                 test

          

     

 

 

 

     

          

                 nexus-release

                 Nexus ReleaseRepository

                 http://192.168.41.1:8081/nexus/content/repositories/releases

          

          

                 nexus-snapshots

                 Nexus SnapshotRepository

                 http://192.168.41.1:8081/nexus/content/repositories/snapshots

          

     

6.3.6.3  新建MvnClient程序

参见JavaApplication

6.3.6.4  添加MavenDemo工程依赖:

注意:如果依赖的当前版本在本程序中,则出现程序文件夹。否则直接依赖jar

//MvnClient/pom.xm

      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

      4.0.0

 

      lee.mvn

      MvnClient

      0.0.1-SNAPSHOT

      jar

 

      MvnClient

      http://maven.apache.org

 

     

           UTF-8

     

 

     

          

                 junit

                 junit

                 3.8.1

                 test

          

          

                 lee.mvn

                 MavenDemo

                 0.0.3-SNAPSHOT

                 compile

          

     

 

     

          

                 nexus-release

                 Nexus ReleaseRepository

                 http://192.168.41.1:8081/nexus/content/repositories/releases

          

          

                 nexus-snapshots

                 Nexus SnapshotRepository

                 http://192.168.41.1:8081/nexus/content/repositories/snapshots

          

     

6.3.6.5  使用MavenDemo程序

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);

    }

}

 

6.4 方法:Nexus。

 

6.5 示例:

7 示例:

 

8 附录

8.1 POM详解

参见: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"> 

   

   

     

    

    

    

    

    

    

    

 

    

   4.0.0 

     

   asia.banseon 

     

   banseon-maven2 

     

    jar 

     

   1.0-SNAPSHOT 

     

    banseon-maven 

     

   http://www.baidu.com/banseon 

     

    A maven project to studymaven. 

   

 

 

   

 

  

   

      

        jira 

       

       http://jira.baidu.com/banseon 

     

   

 

 

 

 

 

 

 

  

  

   

   

   

   

   

   

   

   

   

   

   

   

   

   

  

 

 

 

   

     

   

      

         

        

            Demo 

             

           [email protected] 

             

           [email protected] 

             

           [email protected] 

           

           http:/hi.baidu.com/banseon/demo/dev/ 

         

     

     

     

    

         

        

            HELLOWORLD 

           

           banseon 

           

           [email protected] 

           

           

           

             

                ProjectManager 

               Architect 

            

           

           demo 

           

           http://hi.baidu.com/banseon 

           

             

               No 

           

           

           -5 

         

     

     

   

    

    

  

         

       

     

   

      

       

        

            Apache2 

           

           http://www.baidu.com/banseon/LICENSE-2.0.txt 

           

            repo 

           

            A business-friendlyOSS license 

         

     

     

     

         

         

           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  

       

       

               

         

       http://svn.baidu.com/banseon 

     

     

     

    

        demo 

       

       http://www.baidu.com/banseon 

   

   

   

    

 

 

 

 

 

 

 

 

 

 

 

  

  

   

   

   

   

   

   

  

 

 

 

 

 

  

  

   

   

   

   

   

   

   

   

   

   

  

 

 

 

  

  

   

  

 

 

 

 

 

 

 

 

 

  

  

   

   

    

    

    

    

    

    

    

    

    

    

     

     

      

      

      

      

      

      

      

      

      

      

     

    

    

    

     

     

       ......

     

         

    

    

    

    

   

  

 

 

 

  

  

   

   

    

     

    

   

   

    

    

      ......

    

   

   

  

 

 

 

 

 

 

  

  

  

  

   

   

   

   

   

   

    

     Windows XP

    

     Windows

    

     x86

     

     5.1.2600

   

   

   

    

     mavenVersion

    

     2.0.3

   

   

   

    

     /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

    

    /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/

   

  

  

  

   

   

    

     

    

   

   

    

     

    

   

   

   

    

     

     

      

      

       

        

       

      

      

       

       

         ......

       

      

      

     

    

   

   

    

    

     

     

      

       

      

     

     

      

      

        ......

      

     

     

    

   

  

  

  

  

  

   

   

    

     

    

    

     

    

    

   

  

  

  

       

   

    

     

    

    

     

    

    

   

  

  

  

   

   

     ......

   

  

  

     

  

  

    ......

  

  

  

   

    

    

      ......

    

   

  

  

  

    ......

  

  

  

 

 

 

 

     

     

    

       

        

        

         

   

   

   

   

   

  

  

  

   

  

  

   banseon-repository-proxy 

  

           banseon-repository-proxy 

           

           http://192.168.1.169:9999/repository/ 

           

           default           

         

   

   

   

    

 

   ......

 

 

   

     

     

       

  

           org.apache.maven 

           

           maven-artifact 

           

            3.8.1 

           

            jar

           

           

             

           test   

           

             

           

           

              

                   spring-core 

                   org.springframework 

                 

               

             

           true

       

   

   

   

   

 

 

 

 

 

 

 

  

  

   

   

   

   

   

   

   

   

   

   

   

   

    

    

     

     

     

     

     

     

     

     

    

   

  

 

 

 

 

 

  

  

    ......

  

 

    

     

   

       

       

        

  

   banseon-maven2 

   banseon maven2 

           file://${basedir}/target/deploy 

           

 

   

 

  

   banseon-maven2

            Banseon-maven2 SnapshotRepository

           scp://svn.baidu.com/banseon:/usr/local/maven-snapshot 

  

 

   

       

          

           banseon-site 

           

            business apiwebsite 

           

             

               scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web  

             

        

 

 

 

 

  

  

  

  

  

  

  

  

 

 

         

   

   

   

你可能感兴趣的:(Java)