MAVEN是很是优秀,可是老是要开命令行敲命令是比较不爽的,咱们已经习惯了使用IDE,因此还有一种将MAVEN整合到Eclipse的方法。html
详情查看:http://www.eclipse.org/m2e/,http://download.eclipse.org/technology/m2e/releasesgit
其中,后者也是该插件的更新地址;安装完成以后要重启Eclipse,而后对几项MAVEN的插件进行设置:github
首先须要修改maven仓库的位置,由于默认是保存到C盘的:apache
<localRepository>D://maven_repository</localRepository>
找到window->preferences->Maven,须要修改两处地方:eclipse
详情查看http://blog.sina.com.cn/s/blog_924d6a570102w2kf.html maven
安装并配置完成以后,将以前的两个项目(Hello,HelloFriend)导入到Eclipse中:测试
依赖管理是MAVEN最核心的功能,也是MAVEN最出彩的地方。POM中关系包括下面几部分:依赖(包括传播性依赖)、继承和聚合。MAVEN中有一个传统,那就是即便是最简单的项目可能也会有很是复杂的依赖关系管理。MAVEN经过MAVEN库解决了jar包的错误依赖问题和jar包冲突的问题。spa
在MAVEN中,咱们只须要在pom.xml配置文件中声明须要依赖的jar包便可,若是本地MAVEN库中有该jar包,则会被直接引用;若是没有该jar包,那么就会自动到互联网上的MAVEN中央仓库下载;MAVEN刚刚安装完成以后,运行mvn compile命令,会出现不少下载的提示也是由于这个缘由。插件
MAVEN使用传播性依赖,这样会致使冲突等问题的发生,因此能够在dependencies标签下使用<exclusions>标签来排除掉须要排除的依赖,可使用通配符所有排除。命令行
<dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>2.0</version> <exclusions> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>
<dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>3.1.0</version> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>
继承是MAVEN的一大亮点,使用它可以很方便的实现项目的升级等功能。Ant也有继承的概念,可是MAVEN在这里将概念进行了升华,MAVEN中的继承是基于项目的继承。
首先在Eclipse中建立一个新的MAVEN项目,名为HelloParent,它的做用是做为父工程给Hello工程和HelloFriend工程提供依赖;建立成功以后,只是修改pom.xm配置文件:
1 <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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>HelloParent</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <packaging>pom</packaging> 7 <description>The parent of Hello project and HelloFriend project</description> 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>compile</scope> 14 </dependency> 15 <dependency> 16 <groupId>com.kdyzm.hello</groupId> 17 <artifactId>Hello</artifactId> 18 <version>0.0.1-SNAPSHOT</version> 19 <scope></scope> 20 </dependency> 21 </dependencies> 22 </project>
这里须要注意的是第三行和第六行的代码,第三行将groupId设置为com.kdyzm.hello,该groupId和Hello项目以及HelloFriend项目中设置的groupId是相同的,这样安装以后(mvn install)在Maven仓库中找到的必定是三个并列的文件夹;第六行的packaging标签中的值是pom,该值默认是jar类型,可是做为父工程,必须将该值设置为pom,这是maven的硬性规定。
而后必定要记得执行mvn install,将该项目安装到Maven仓库,不然其它项目是没有办法得到该父工程的依赖的。
修改pom.xml配置文件,这时候因为须要继承HelloParent,并且version和groupId和父工程中的是相同的,因此能够将这两项声明去掉,不然的话就须要从新定义不能和父工程总的定义重复,不然会警告声明无效。
另外,使用parent标签声明父类,须要具体到哪个版本;注意relativePath标签,该标签声明了父工程中pom.xml配置文件的位置,为何是../HelloParent,缘由在其groupId和artifactId的声明上,注意使用这两个标签的值肯定relativePath的值。
只要保存好pom.xml配置文件,相应的maven依赖就会自动添加到classpath,以下图所示:
而后右键项目run As便可:
若是是用 2中的方式直接所有继承,实际上会出问题,若是父工程中定义了很是多的依赖,那么所有继承首先必定有大量的依赖用不着,并且若是是本工程继承了父工程,并且同时父工程又引用了本工程的依赖,那么这样不只仅是用不着的问题了,而是不合逻辑了。
MAVEN使用依赖管理器对依赖进行管理,好比Hello/pom.xml配置文件,若是直接继承了父工程,那就变成了本身引用本身,显得很是的滑稽
添加依赖管理器后,默认子工程不会继承父工程中的任何依赖;依赖管理器的标签是<dependencyManagement>
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.kdyzm.hello</groupId> 5 <artifactId>HelloParent</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>pom</packaging> 8 <description>The parent of Hello project and HelloFriend project</description> 9 <properties> 10 <argLine>-Dfile.encoding=UTF-8</argLine> 11 </properties> 12 <dependencyManagement> 13 <dependencies> 14 <dependency> 15 <groupId>junit</groupId> 16 <artifactId>junit</artifactId> 17 <version>4.9</version> 18 <scope>compile</scope> 19 </dependency> 20 <dependency> 21 <groupId>com.kdyzm.hello</groupId> 22 <artifactId>Hello</artifactId> 23 <version>0.0.1-SNAPSHOT</version> 24 <scope>compile</scope> 25 </dependency> 26 </dependencies> 27 </dependencyManagement> 28 <modules> 29 <module>../Hello</module> 30 <module>../HelloFriend</module> 31 </modules> 32 </project>
<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> <artifactId>Hello</artifactId> <name>Hello</name> <parent> <artifactId>HelloParent</artifactId> <groupId>com.kdyzm.hello</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../HelloParent</relativePath> </parent> <!-- 依赖管理器 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
注意上面重点强调的部分,在dependency标签中MAVEN坐标三元素本应该一个都不能少,可是这里只是写了两个,并且scope标签也没有写,这些都须要继承父类的。
疑问:搞了半天,好不容易不用写依赖的配置代码了,最后又得手写配置代码,这么作的话要父工程还有什么意义?
正如上面所说的,使用父工程继承以后,能够不用写scope标签和version标签了,scope标签能够视状况而定决定是否覆盖父工程中的配置,可是Version标签就不能写了,必定要继承父工程中的才行,这么作的好处就是可以快速实现项目升级,好比项目经理说要将Junit升级到5.0(固然尚未这个版本?),若是每一个成员都配置了version标签,那么所有的人都得手动修改配置文件;可是若是使用继承了的话,根本就不须要修改配置文件,项目经理直接将父工程中的配置文件修改一下就好了,每一个小组成员什么配置都不须要修改jar包就已经升级了。
一个项目颇有可能会有多个子项目,若是对子项目一个一个的进行测试就有违maven高度自动化的设计原则,最理想的状况就是可以在一个pom.xm配置文件中进行全部字模块工程的测试,固然这个pom.xml配置文件必定是父工程的配置文件了。
使用<modules>标签实现该功能:
<modules> <module>../Hello</module> <module>../HelloFriend</module> </modules>
这里使用相对路径找到两个子项目;这样直接对着父项目右键测试,那么全部的子项目都会自动进行测试并报告结果:
搭建私服很是麻烦,暂时存档