标签:
问题?Maven的使用《二》之依赖、继承、聚合
前面已经讲到了环境的搭建(环境搭建链接),这里就不重复了。下面的主要是对依赖、继承、聚合详细说明。
这里用的编译软件是eclipse,要装maven的插件(下载地址和安装方法:点击下载链接)。
然后装完后,这个时候插件已经在Preference里面了,但是插件还不能用,需要我们做一些设置。
一般来说,做到这里就可以用了。但是我在用的过程中会出现这样的一种错误(点击查看链接),经过查询资料,已经得到了很好的解决办法。做下面设置(把jir改成jdk格式的)
以上配置已经做完。
导入已有的maven工程:
新建maven工程:
模板一般选用:
新建javaWeb工程:
1.依赖关系:在工程之中需要依赖各种各样的jar包,也可能需要依赖其他的maven工程打包好的包。这个时候就需要使用依赖关系对pom.xml来进行配置。
pom.xml中配置:(标签的使用及作用,在上一节已经提及)
<dependency><!-- 这是依赖另外一个工程的格式,如果是依赖jar包的话要另外写--> <groupId>cn.itcast.maven</groupId> <artifactId>HelloFriend</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency>
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> <scope>test</scope><!-- 不指明的话,默认是compile(编译)--> </dependency>
根据传递性依赖的原则:路径最近者优先路径相同,第一声明者优先。(相互继承,子工程会选择最近的一个父工程的jar包进行继承)
2.继承关系:懂得一点儿java的,都知道继承是什么,就是为了将公共的东西拿出来直接用。
继承为了消除重复,我们把很多相同的配置提取出来(比如在maven相互依赖的项目中,不同的项目中却有相同的jar包配置,那样不是显得非常多而且繁琐,每次都需要去配置它,很麻烦)
所以,maven提供了一个父类maven项目(新建工程Parent,目的消除子工程的配置文件中重复的内容,所以无需代码类,删除代码)来装所有公共使用的jar,只要继承都可以使用。
但是需要做点儿配置步骤:
假设子工程都需要用到了相同的junit版本4.9
(1)在父类工程的pom.xml中配置依赖的jar包
(2)在各个子工程中引入父工程即可<parent>,放在<denpendencies>上面,同时在所有子项目中Hello、HelloFriend、MakeFridens中删除重复的<groupId>、<version>、<dependency>
这个时候就不需要子工程的pom.xml文件配置公共的jar包了。
<parent> <groupId>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../Parent/pom.xml</relativePath> </parent>
(3)修改父工程中的pom.xml
<packaging>jar</packaging> 改为 <packaging>pom</packaging>
这是一个父工程,实际是一个聚合工程,它没有实际代码,它的作用是抽象出子工程公用的内容
不加的话会报这样的错误;
Project build error: Invalid packaging for parent POM cn.itcast.maven.HelloParent:0.0.1-SNAPSHOT, must be "pom" but is "jar"
3.聚合关系:在java中我们也可以知道,就是在完成某一个模块的时候,它需要几个模块的公共工作才能完成(不是组合关系)。
在上面的继承关系中,我们从父工程依次执行mvn install命令,那么它就没问题,因为依次都打包到本地仓库中去了,子工程要依赖父工程的包,自然也就没问题,但是当我们反过来做就会出问题。解决这个问题依次这样执行,就会变得很繁琐,这个时候我们的maven的聚合出现了,它就是为此问题而存在。
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,这样做,我们只需要对父工程进行mvn install命令,它就会依次把继承依赖的所有工程都自动执行mvn clean test compile package install命令了。怎么样很方便吧!这就是mvn的强大之处。
它也需要做点儿pom.xml配置:只需要在父工程中配置
<modules> <module>../Hello</module> <module>../HelloFriend</module> <module>../MakeFriends</module> <module>../HelloWeb</module> </modules>
<modules><module>…</module></modules>
代码:
父工程pom.xml:
<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>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Parent</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <modules> <module>../Hello</module> <module>../HelloFriend</module> <module>../MakeFriends</module> <module>../HelloWeb</module> </modules> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> </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> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <parent> <groupId>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../Parent/pom.xml</relativePath> </parent> </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> <groupId>cn.itcast.maven</groupId> <artifactId>HelloFriend</artifactId> <version>0.0.1-SNAPSHOT</version> <name>HelloFriend</name> <!-- 公司信息 --> <organization> <name>北京传智播客教育科技有限公司</name> <url>http://www.itcast.cn/</url> </organization> <!-- 研发人员列表 --> <developers> <developer> <id>weichen</id> <name>陈伟</name> <email>weichen@163.com</email> <roles> <role>研发经理</role> <role>研发工程师</role> </roles> </developer> </developers> <!-- 贡献人列表 --> <contributors> <contributor> <name>胡莹莹</name> <email>huyingying@163.com</email> <roles><role>研发工程师</role></roles> </contributor> </contributors> <parent> <groupId>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../Parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> </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> <groupId>cn.itcast.maven</groupId> <artifactId>MakeFriends</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MakeFriends</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../Parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>HelloFriend</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
标签:
原文地址:http://blog.csdn.net/mr_li13/article/details/51178646