maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译、构建、测试、发布和报告等。在大型项目开发中,使用maven来管理是必不可少的。

一、安装maven

1、Windows安装

   1) 从官网(http://maven.apache.org/download.cgi)下载需要安装的maven版本,并解压到本地磁盘中;

   2) 在系统环境变量中新建一个变量,名称为M2_HOME,值为maven所在路径,如:D:\apache-maven-3.3.1;

   3) 在环境变量Path中添加maven/bin目录,值为:%M2_HOME%\bin,注意变量之间用分号间隔;

   验证安装:cmd中输入命令mvn -v,如能正确显示版本则说明安装成功

2、Eclipse安装

   1) Eclipse中安装maven,只需要安装插件m2eclipse即可。最好将插件中的maven替换为本地安装的maven,因此通常需要事先安装本地maven。

   打开Eclipse,选择Help->Install New Software,输入地址:http://download.eclipse.org/technology/m2e/releases(或:http://download.eclipse.org/technology/m2e/milestones/1.8/),等待安装完成。打开检查windows->Preferences,如果看到maven,则说明安装成功。

   配置Eclipse中的maven:

   ① windows->Preferences->Maven->Installations,新增选择本地安装的Maven目录,然后切换成本地的Maven;

   ② windows->Preferences->Maven->user Settings,更改User Settings为本地安装Maven目录下conf中的settings.xml;

   使用Eclipse新建maven项目时,选择Maven->Maven Project,最常用的ArtifactId为maven-archetype-quickstart和concoon-22-archetype-webapp。

   2) 常见Eclipse执行maven命令错误及解决方案

   ① 提示:-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match

    解决:设一个环境变量M2_HOME指向你的maven安装目录(如:M2_HOME=D:\Apps\apache-maven-3.3.1),然后在Window->Preference->Java->Installed JREs->Edit在Default VM arguments中设置-Dmaven.multiModuleProjectDirectory=$M2_HOME

   ② 提示:Unsupported major.minor version 51.0

    解决:由于Maven项目编译JDK与系统安装JDK版本不一致导致,项目右键设置Compiler与安装JDK一致即可

3、说明配置

   mvn的全球资源库为:http://mvnrepository.com/,默认的中央仓库路径:https://repo.maven.apache.org/maven2(来自apache-maven-xxx/lib/maven-model-builder-xxx.jar/org/apache/maven/model/pom-4.0.0.xml中Central Repository的url值)。

   maven搜索资源时,会现在本地的仓库中进行搜索,不存在对应的jar资源,则到中央仓库中搜索并下载到本地仓库中。

   本地仓库默认路径为:{用户文档}/.m2/,通常需要修改到指定位置,只要修改apache-maven-xxx/conf/settings.xml文件中的localRepository值,如:<localRepository>D:\java-learn\mvn-repository</localRepository>

   在项目中添加需要的jar,可在官方资源库(http://search.maven.org/)中搜索,然后将需要的jar的GAV配置信息复制到你的pom.xml配置中即可。

二、maven常用命令

   mvn compile 编译项目

   mvn package 打包发布(生成的jar包名称默认为:{artifactId}-{version}.jar,如:maven-test01-0.0.1-SNAPSHOT.jar)

   mvn package -Dmaven.test.skip=ture 打包时跳过测试

   mvn clean 清理(删除target目录)

   mvn install 在本地Repository中安装jar(项目被依赖时必须先将项目打包到资源repository中)

   mvn test 运行应用程序中的单元测试

   mvn archetype:generate 快速生成一个maven项目,根据提示输入groupId、artifactId、version可自动创建一个包含基本架构的maven项目
Choose a number or apply filter (format: ...): 直接回车,然后选择版本,接着分别输入groupId、artifactId、version

   mvn archetype:generate -DgroupId-{groupId} -DartifactId-{artifactId} -Dversion-{version} 指定GAV快速创建maven项目,如mvn archetype:generate -DgroupId-com.hicoor.maven -DartifactId-maven-test03 -Dversion-0.0.1-SHAPSHOT

三、maven项目文件结构与pom.xml标签介绍

1、maven项目文件结构

   所有使用maven管理的项目,其文件结构都是固定的,这相当于给项目的文件结构制定了一个通用规范,使得项目更加容易理解。maven项目结构如图1所示。

图1 maven项目文件结构

   进入项目根目录(也就是pom.xml文件所在路径),执行编译命令:mvn compile,会在项目根目录中创建一个target文件夹,里面包含已编译的文件;执行编译测试:mvn test,会在target中设生成编译源码和测试报告,实测报告在surefire-reports目录中。

2、pom.xml文件结构与标签含义

   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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.hicoor.maven</groupId>
<artifactId>maven-test01</artifactId>
<version>0.0.1-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>..</groupId>
<artifactId>..</artifactId>
<version>..</version>
</dependency>
</dependencies> </project>

   其中部分标签与含义如下:

   1) project,pom.xml文件中的顶层元素;

   2) modelVersion,指明POM使用的对象模型的版本,值很少改动;

   3) groupId,指明创建项目的组织或者小组的唯一标识。GroupId是项目的关键标识,典型的,此标识以组织的完全限定名来定义。比如,org.apache.maven.plugins是所有Maven插件项目指定的groupId;

   4) artifactId,模块名称)指明此项目产生的主要产品的基本名称。项目的主要产品通常为一个JAR文件。第二,象源代码包通常使用artifactId作为最后名称的一部分。典型的产品名称使用这个格式: <artifactId><version>;

   5) version,版本号,格式通常为x.x.x-里程碑。通常情况下,第一个x表示程序架构上发生重大变化,第二个x表示程序架构中的分支变化,第三个x表示程序改动的次数。常见的里程碑有如下值:① SNAPSHOT,快照版,正在开发的版本;② Alpha,是内部测试版,一般不向外部发布,会有很多Bug,一般只有测试人员使用;③ Beta,公共测试版,通常有客户单位参与的测试;④ Release,即Release Candidate,候选版本,RC版不会再加入新的功能了,主要着重于除错;⑤ GA,即General Availability,正式发布的版本。

四、maven依赖特性

   依赖特性在<scope></scope>中配置,如:

<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope>compile</scope>
<!--排除依赖,当多个间接依赖冲突时使用-->
<exclustions>
<exclustion>
<groupId>xx_groupId</groupId>
<artifactId>xx_artifactId</artifactId>
</exclustion>
</exclustions>
</dependency>
</dependencies>

1、scope依赖关系的值

   1) compile(编译范围),缺省值,适用于所有阶段,会随着项目一起发布;

   2) provided(已提供范围),类似compile,打包时会将该包排除,期望JDK、容器或使用者会提供这个依赖。如servlet.jar;

   3) runtime(运行时范围):依赖在运行和测试系统的时候需要,但在【编译】的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC;

   4) test(测试范围),只在测试时使用,用于编译和运行测试代码。不会随项目发布;

   5) system(系统范围),类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它;

2、依赖的传递

   当一个项目依赖另一个项目时,会将被依赖项目中的所有compile的依赖传递过来 。

   1) (当依赖级别相同的时候)间接依赖存在先后性

   假设项目A依赖了xx-1.6.jar,项目B依赖了xx-2.3.jar。当项目C同时依赖A和B时,在xx对于项目C是间接依赖,C会加载1.6还是2.3的版本取决于C先依赖A还是先依赖B,即Maven不会自动判断间接依赖的包的版本。

   2) (当依赖级别不同的时候)优先依赖级别少的那个依赖

   假设项目A依赖了项目D,项目D中有依赖yy-3.3.jar,项目B依赖了yy-4.3.jar。当项目C同时依赖A和B时,由于C->A->D->yy为三级依赖,C->B->yy为二级依赖,所以项目C会间接依赖yy-4.3.jar。

3、依赖的排除

   当多个依赖存在冲突的时候,可以使用exclustion,将不需要的间接依赖排除掉。

五、maven的聚合和继承

1、聚合多个模块

   一个项目中可能存在多个模块,将他们聚合到一个maven项目中可同时编译多个模块,避免大量重复操作。

   聚合方法:在模块的同级目录中新建一个简单Maven项目,只包含一个pom.xml配置文件,使用<modules></modules>聚合需要的模块(位于标签<project></project>内),聚合示例如:

<modules>
<!--根据相对路径使用../-->
<module>../maven-test01</module>
<module>../maven-test02</module>
</modules>

2、pom.xml配置文件的继承

   在多个maven项目中可能存在大量的重复的pom.xml配置内容,可以将这些重复的内容放到一个基本maven项目中,然后在其他maven项目中使用标签<parent></parent>继承。

   如新建了一个maven-parent基础配置项目,则其他项目继承时在pom.xml中添加如下内容:

<parent>
<!--通过GAV定位parent项目-->
<groupId>com.hicoor.maven</groupId>
<artifactId>maven-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../maven-parent/pom.xml</relativePath>
</parent>

   在maven-parent中不仅可以添加常用的配置,也可以添加dependencyManagement依赖管理,每个子项目需要添加父项目管理的依赖时,可不指定项目版本号,maven在编译时会自动向上去寻找版本号。

   例如在maven-parent的pom.xml中指定<project></project>内容:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
<!-- 添加其他依赖 -->
</dependencies>
</dependencyManagement>

   则在其他继承项目中可以直接引用mysql依赖而不用指定版本号,如:

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>

   这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改。另外如果某个子项目需要另外的一个版本,只需要声明version就可。

   注意:使用parent结构后,打包命令要基于parent/pom.xml,会自动给子项目打包。

六、搭建maven私有服务器Nexus

   在公司内多人联合开发maven项目时,为避免版本换乱,最好搭建一个局域网内部maven资源服务器,所有的项目会自动搜索使用该服务器内的资源。 甚至有些公司内部不允许访问互联网,此时搭建maven私有服务器就显得更有必要了。

1、搭建安装Nexus(参考:http://www.cnblogs.com/quanyongan/archive/2013/04/24/3037589.html

   1) 去官网(http://www.sonatype.org/nexus)下载免费OSS版本,并解压到本地磁盘,注意Pro版本是收费的;

   2) 添加Path环境变量,如:D:\java-learn\nexus-2.11.1-01-bundle\nexus-2.11.1-01\bin;

   3) 安装nexus服务,在cmd中输入nexus install,或在nexus-2.11.1-01-bundle\nexus-2.11.1-01\bin\jsw\windows-x86-64中双击运行install-nexus.bat;

   4) 启动服务后,访问web管理界面http://localhost:8081/nexus/,默认登录用户admin,默认密码admin123;

2、web界面说明

   左侧菜单点击Repositories,右侧List中有一列为Type,其值与含义如下:

   1) hosted,为内部服务,面向局域网;

   2) 3rd party,用来保存第三方jar(典型的oracle数据库的j驱动包);

   3) Snapshots,用来保存项目组内部的快照;

   4) Releases,用来保存项目组内部的发布版;

   5) Central,中央工厂下载的所有jar存放与此;

3、Nexus配置

   1) 配置只在当前maven项目中使用nexus私服,在pom.xml中添加如下内容:

<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</repository>
</repositories>

   2) 配置使所有的maven项目默认使用nexus服务器,打开maven安装目录apache-maven-x.x.x\conf下的settings.xml,在<profiles></profiles>标签中添加如下内容:

<profile>
<id>nexusProfile</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!-- releases和snapshots依赖默认是关闭的,需要手动打开 -->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>

     并在<settings></settings>标签中激活使用哪种profile,配置如下:

<activeProfiles>
<!-- 只有激活之后才会生效 -->
<activeProfile>nexusProfile</activeProfile>
</activeProfiles>

4、发布项目到Nexus

   将自己的maven项目发布到nexus中,步骤如下:

   1) 在项目pom.xml中添加如下配置:

 <distributionManagement>
<repository>
<id>hicoor-release</id>
<name>Releases</name>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>hicoor-snapshot</id>
<name>Snapshots</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>

   2) 打开文件apache-maven-x.x.x\conf\settings.xml,在<servers></servers>标签内添加如下内容(注意id要与项目pom.xml中的id对应):

<server>
<id>hicoor-release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>hicoor-snapshot</id>
<username>deployment</username>
<password>deployment123</password>
</server>

   3) 在Eclipse发布项目,pom.xml->Run As->Maven bulid,输入clean deploy,即可将项目发布到nexus中。

7、使用Maven创建WebApp项目

   参考:https://www.cnblogs.com/noteless/p/5213075.html

   错误处理:

   1) 创建Maven项目过程报错,错误信息“could not calculate build plan: plugin maven-war-plugin..”,解决办法是:将maven资源路径下org\apache\maven\plugins内清空,再次操作即可。

   2) Maven项目创建完后,右键->Properties->Project Facets,选择Dynamic Web Module时,如果提示错误“Dynamic Web Module 3.0 requires Java 1.6 or newer”,解决办法是,在项目的pom.xml的<build></build>标签中加入如下内容,然后保存,项目构建完成后在项目文件夹上点右键,选择Maven->Update Project Configuration,问题解决。

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
七、eclipse-maven常见错误及解决方案

1、升级maven-jar-plugin后pom.xml报错误:m2e error in MavenArchiver.getManifest()

   解决方案,升级eclipse m2e扩展,操作步骤,eclipse -> Help > Install New Software,使用下述其中一个资源进行安装:① http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-mavenarchiver/0.17.2/N/LATEST/; ② https://otto.takari.io/content/sites/m2e.extras/m2eclipse-mavenarchiver/0.17.2/N/LATEST/

   参考:http://stackoverflow.com/questions/37555557/m2e-error-in-mavenarchiver-getmanifest

八、使用阿里云镜像

   修改maven根目录下的conf文件夹中的setting.xml文件,内容如:

<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>
http://maven.aliyun.com/nexus/content/groups/public/
</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

最新文章

  1. EL表达式语言总结
  2. 转Global.asax文件
  3. 学习笔记—Fragement +Actionbar
  4. java获取客户访问IP
  5. 第三百零四天 how can I 坚持
  6. 开通博客第一天 (先发一些android(java)常见异常信息
  7. discuz二次开发笔记(二)------跳转函数运用
  8. 《HBase权威指南》读书笔记----简介
  9. df换行问题的设置
  10. JAVA内部类_2
  11. Python并发编程-RabbitMQ消息队列
  12. Django websocket 长连接使用
  13. IntelliJ IDEA添加JUnit单元测试
  14. 如何热更新线上的Java服务器代码
  15. where 常用条件范例
  16. python----集合用法总结
  17. [转] SSO单点登录原理和流程分析
  18. NIO学习(1)-入门学习
  19. PowerBuilder连接数据库
  20. github新建托管项目及上传项目

热门文章

  1. fuser 命令的介绍
  2. 访问google,youtube
  3. docker 练习
  4. twitter通过oAuth验证获取json数据
  5. Redhat5.8 环境下编译安装 Redis 并将其注册为系统服务
  6. js 遮罩层 loading 效果
  7. mysqlbinglog基于即时点还原
  8. thinkphp多模板布局设置!!
  9. SQL serve 聚合函数、字符串函数
  10. vmware安装centos时遇到无法创建新虚拟机: 不具备执行此操作的权限。