您的位置:首页 > 其它

Maven

2016-07-14 14:16 176 查看
maven

==========================================
一、Maven简介

-----------------------------------------------------------------

Maven是一个用于项目构建的工具,通过它可以便捷地管理项目的生命周期,即项目的构建,jar包依赖,开发,测试,发布打包等。

1.jar包依赖

maven的一大特点,通过在pom.xml文件中配置jar包的依赖关系,就可以自动下载jar包到项目中,

别人开发或者使用这个工程时,不需要来回的拷贝jar包,只需要复制这个pom.xml就可以自动的下载这些jar包。

而且,我们自己下载jar包,还有可能造成版本的不一致,maven通过坐标能精确的匹配jar包,

管理jar包之间的依赖,就不会出现jar包版本不一致造成的问题了。

2.项目坐标

Maven通过特定的标识来定义项目名称,这样既可以唯一的匹配其他的jar包,也可以通过发布,使别人能使用自己的发布产品。

这个标识被叫做坐标,其实就是简单的xml而已:
<groupId>com.test</groupId>
<artifactId>maventest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
groupId,artifactId,version,packaging这四项组成了项目的唯一坐标

<name>maventest</name>

<url>http://maven.apache.org</url>

groupId:项目名称

artifactId:包名称

version:版本号(分为快照SNAPSHOT和稳定版本Release)

packaging:包的类型,一般是jar或war,默认是jar

name和url,一个是名称,一个是maven的地址。

3.Maven目录结构

-----------------------------------------------------------------

MavenProjectRoot(项目根目录)

   |----src

   |     |----main

   |     |         |----java ——存放项目的.java文件

   |     |         |----resources ——存放项目资源文件,如spring, mybatis配置文件

   |     |----test

   |     |         |----java ——存放所有测试.java文件,如JUnit测试类

   |     |         |----resources ——存放项目资源文件,如spring, v配置文件

   |----target ——项目输出位置 ——jar、war包等

   |----pom.xml ----用于标识该项目是一个Maven项目(项目标识,jar包引入,插件引入,私服配置等)

4.Maven常用命令

-----------------------------------------------------------------

compile:编译项目的源代码

clean:  清除先前构建的artifacts

package:把已编译的代码打包成可发布的格式,比如jar、war

install:把包安装在本地的repository中,可以被其他工程作为依赖来使用

deploy: 在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository(比如nexus),使得其他的开发者或者工程可以共享

jetty:run 运行jetty或tomcat:run(pom.xml引入了相关的插件)

-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
5.仓库

maven仓库存放的是jar包,包括本地项目打成的jar包和引用的jar包(spring等),也包括分模块开发(后面讲)时的一个个模块;

maven仓库大致分为本地仓库、私服、代理仓库、中央仓库;

maven下载一个jar包,查找顺序为:本地仓库--》私服--》代理仓库--》中央仓库;

本地仓库:

可在setting.xml文件中配置:<localRepository>F:\repository</localRepository>

本地保留一份仓库,即使在没有公司内网外网的情况下,也能正常使用依赖的jar包,有网时从本地下载jar包,也能节省网络;

私服:

公司级别的仓库,在没有外网的情况下,可以正常使用jar包,并且自己项目可以打成jar包放到私服上,供其他人员依赖使用;

从公司局域网下载也比从外网下载快;

代理仓库:

(maven私服,本地仓库都可以叫做代理仓库,只不过这里说的代理是代理中央仓库或者代理全球级别的仓库,

私服作为公司级别的仓库代理这里的仓库,本地仓库代理私服;)

可以代理maven中央仓库,集成些常用的jar包,地址放在本土的(中国),比如:
http://maven.oschina.net/content/groups/public/
中央仓库:

maven全球级别的仓库,地址是:
http://repo1.maven.org/maven2/ 其内嵌在maven源码中,

存储了上亿的构件,为全球开发者提供访问。

6.pom.xml/setting.xml配置文件

pom.xml配置文件

pom作为项目对象模型(java就是万物皆对象)。

通过xml表示maven项目,使用pom.xml来实现。

主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,

                项目的url,项目的依赖性,以及其他所有的项目相关因素。

<project>

  <modelVersion>4.0.0</modelVersion>

  <!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->

  <!-- 基础设置 -->

  <groupId>...</groupId>

  <artifactId>...</artifactId>

  <version>...</version>

  <packaging>...</packaging>

  <name>...</name>

  <url>...</url>

  <!-- 上面这几个前面已经介绍过了 -->

 

  <parent>...</parent>

  <properties>...</properties>

  <dependencies>...</dependencies>

  <modules>...</modules>

 

</project>

1>dependencies:

引入依赖的jar包,如果需要非开源包(本地包,第三方等),那么有三种方法处理:

1.本地安装mvn install

2.创建自己的repositories并且部署这个包,使用类似上面的deploy:deploy-file命令

3.设置scope为system,并且指定系统路径

<dependency>

    <groupId>com.aa.myJar</groupId>

    <artifactId>a</artifactId>

    <version>1.0</version>

    <scope>system</scope>

    <systemPath>${project.basedir}/lib/a-1.0.jar</systemPath>
</dependency>

***********************************************************************************************************************

注意:

systemPath 引入的jar包,不能打包进war包中,还是别这样引入了,将jar包放进私服,从私服下载吧。

如果setting.xml不方便配置私服信息,那在pom.xml中配置。

***********************************************************************************************************************
2>exclusions/exclusion:

去除依赖,如果项目中引入A和B,A和B中又都有X,则可将B中的X从依赖树种移除

<dependency>

    <groupId>B</groupId>

    <artifactId>b</artifactId>

    <version>6.6.6</version>

    <exclusions>

        <exclusion>

            <groupId>X</groupId>

            <artifactId>x</artifactId>

        </exclusion>

    </exclusions>

</dependency>

3>parent:

如果项目是分模块的,例如:一个web项目分成action、service、dao、common四层,

则可以将一个项目分成四个模块开发:

<modules>

    <module>moon-store-action</module>

    <module>moon-store-service</module>

    <module>moon-store-dao</module>

    <module>moon-store-common</module>

</modules>

(父类的项目packaging为pom类型)

每一层都是一个独立的项目,那么每个项目中的pom.xml文件都要引入:

<parent>

    <groupId>moon-store</groupId>

    <artifactId>moon.store</artifactId>

    <version>0.0.1-SNAPSHOT</version>

</parent>

分模块开发的好处:

4>properties:

是为pom定义一些常量,在pom中的其它地方可以直接引用

<properties>

      <file.encoding>UTF-8</file.encoding>

      <spring.version>3.1.1.RELEASE</spring.version>

</properties>

使用方式如下:

${file.encoding}

还可以使用project.xx引用pom里定义的其它属性:如$(project.version}

5>maven依赖关系中Scope的作用:

它主要管理依赖的部署,目前<scope>可以使用5个值:

 * compile,缺省值,适用于所有阶段,会随着项目一起发布。

 * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。

 * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。

 * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。

 * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

异常:

org.apache.jasper.JasperException: Unable to compile class for JSP:

servlet-api.jar 包导致的

tomcat lib目录下有servlet-api.jar这个包,项目中引用时,需要将其scope设置为provided

<dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>servlet-api</artifactId>

            <scope>provided</scope>

</dependency>

注意:也可能是其它包里也依赖servlet-api.jar导致的,所以所有有依赖servlet-api.jar的这个包,也要跟着改

6>jar包版本 SNAPSHOT release

maven2会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。

如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。

如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载(即使我们内部的镜像服务器上的组件比本地新)。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
maven  plugins

1.maven-compiler-plugin  编译

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-compiler-plugin</artifactId>

    <version>3.1</version>

    <configuration>

    <source>1.7</source>

    <target>1.7</target>

    </configuration>

</plugin>

2.jetty-maven-plugin web容器jetty

<plugin>

<groupId>org.eclipse.jetty</groupId>

<artifactId>jetty-maven-plugin</artifactId>

<version>9.2.3.v20140905</version>

</plugin>

3.maven-source-plugin 打包时生成源码

<plugin>

<artifactId>maven-source-plugin</artifactId>

<version>2.1</version>

<configuration>

    <attach>true</attach>

</configuration>

<executions>

    <execution>

    <phase>compile</phase>

    <goals>

        <goal>jar</goal>

    </goals>

    </execution>

</executions>

</plugin>

4.maven-deploy-plugin 安装到私服

<plugin>  

    <artifactId>maven-deploy-plugin</artifactId>  

    <executions>  

        <execution>  

        <id>deploy</id>  

        <phase>deploy</phase>  

        <goals>  

            <goal>deploy</goal>  

        </goals>  

        </execution>  

    </executions>  

</plugin>

4.default plugin(待议)

maven-clean-plugin:2.5:clean (default-clean)

maven-install-plugin:2.4:install (default-install)

maven-jar-plugin:2.4:jar (default-jar)

maven-resources-plugin:2.6:resources (default-resources)

【生成、上传、下载】jar包,源码

1.生成source、javadoc

mvn clean javadoc:jar source:jar

pom.xml中添加maven-source-plugin插件

2.上传

1)安装到本地库

jar:mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hbase  -Dversion=1.0 -Dpackaging=jar -Dfile=[path to file]

source:mvn install:install-file -DgroupId=tokyotyrant -DartifactId=tokyotyrant -Dversion=0.11 -Dpackaging=jar -Dfile=tokyotyrant-0.11-sources.jar -DgeneratePom=true -Dclassifier=sources

2)安装到私服

mvn deploy:deploy-file -DgroupId=com.xx.xx -DartifactId=xx -Dversion=1.0.0 -Dpackaging=jar -Dfile=xx.jar -Durl=仓库地址 -DrepositoryId=仓库名

另外,需要上传resources的命令如下:

mvn deploy:deploy-file -DgroupId=com.xx.xx -DartifactId=xx -Dversion=1.0.0 -Dpackaging=jar -Dclassifier=sources -Dfile=xx-sources.jar -Durl=仓库地址 -DrepositoryId=仓库名

pom.xml中配置

添加maven-deploy-plugin插件

添加distributionManagement配置

<distributionManagement>

        <repository>

            <id>releases</id>

            <name>Releases</name>

            <url>http://192.168.104.104:8081/nexus/content/repositories/releases</url>

        </repository>

        <snapshotRepository>

            <id>snapshots</id>

            <name>snapshots</name>

            <url>http://192.168.104.104:8081/nexus/content/repositories/snapshots</url>

        </snapshotRepository>

</distributionManagement>

setting.xml配置

<servers>

    <server>

        <id>snapshots</id>

        <username>admin</username>

        <password>admin123</password>

    </server>

    <server>

        <id>releases</id>

        <username>admin</username>

        <password>admin123</password>

    </server>

</servers>

注意:

pom.xml文件中distributionManagement/repository/id与

setting.xml文件中servers/server/id要一致

3.下载

setting.xml中配置:

<profiles>  

    <profile>  

        <id>downloadSources</id>  

        <properties>  

        <downloadSources>true</downloadSources>  

        <downloadJavadocs>true</downloadJavadocs>             

        </properties>  

    </profile>

</profiles>

<activeProfiles>  

  <activeProfile>downloadSources</activeProfile>  

</activeProfiles>

或者配置eclipse:

Window > Preferences > Maven and checking the "Download Artifact Sources" and "Download Artifact JavaDoc" options

或者

-DdownloadSources=true

二、nexus

三、mavem/nexus linux/window搭建/MyEclipse中使用

linux安装maven

1.下载maven http://maven.apache.org/download.cgi apache-maven-3.3.9-bin.tar.gz 

2.在root用户下

cd /usr/local  

上传apache-maven-3.3.9-bin.tar.gz  

解压:tar -zvxf apache-maven-3.3.9-bin.tar.gz  

3 vi /etc/profile 设置全局变量

M2_HOME=/usr/local/apache-maven-3.3.9

export M2_HOME  

PATH=$PATH:$M2_HOME/bin  

export PATH  

执行source /etc/profile 使配置文件生效

4. 测试

mvn -v 显示版本相关信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven