Maven与MyEclipse项目
来源:互联网 发布:文员office办公软件 编辑:程序博客网 时间:2024/05/21 01:32
新建一个maven工程,MakeFriends,这个类用到了HelloFriend中的方法,所以MakeFriends类依赖于HelloFriend。所以需要在pom.xml中定义依赖。我们的MakeFriends类需要测试,在test文件夹下建立一个测试程序,这个程序依赖于junit,所以在pom中也要有junit的依赖配置,注意版本一定要配置对,因为这是坐标,坐标不对找不到对应的junit。
工程下的MavenDependencies文件夹是存放这个工程的依赖文件的地方。
为什么一个工程只依赖于junit,不依赖别的,但是依赖文件多了一个hamcrest-core-1.1.jar呢?因为junit依赖于hamcrest-core-1.1.jar,所以现在相当于依赖传递了,所有的依赖链上的文件都会被拿到这里。
情景:当前工程组成为:Hello,HelloFriend,MakeFriends,依赖关系为,Hello依赖junit,HelloFriend依赖于junit,Hello,MakeFriends依赖于junit,HelloFriend,那么Hello的Maven Dependencies下面有junit的jar,HelloFriend的Maven Dependencies下会有Hello和junit,MakeFriends会有Hello,HelloFriend,junit。
操作:现在Hello又依赖了log4j的2.4.16版本,他的Maven Dependencies就多了一个log4j的文件,那么由于依赖关系,HelloFriend的Maven Dependencies下也多了log4j的2.4.16版本,但现在又在HelloFriend的pom.xml中定义依赖log4j的2.4.14版本,会出现什么情况呢?
结果:HelloFriend的Maven Dependencies下有一个log4j的2.4.14版本,没有log4j的2.4.16版本,后面的MakeFriends的Maven Dependencies里面也有一个log4j的2.4.14版本。
对于MakeFriends来说,可以继承两个版本的log4j,当可继承的文件出现冲突的时候(比如版本冲突),为什么选择了log4j的2.4.14版本呢?这是第一个原则,路径长度不同,近者优先原则。即:Hello依赖了log4j的2.4.16,HelloFriend依赖了log4j的2.4.14,但是MakeFriends是直接依赖HelloFriend的,MakeFriends间接依赖Hello,所以MakeFriends离HelloFriend比较近,选择HelloFriend的log4j继承。
第二个原则,路径长度相同,第一声明者优先,即在pom.xml文件中靠前位置声明的优先。
Maven Dependencies中文件的传递受作用域scope影响,
以刚才的Hello和HelloFriend的log4j说明。
因为HelloFriend直接依赖Hello,而间接依赖log4j,在HelloFriend的pom.xml中配置的直接依赖的Hello的范围是compile,所以定位到第一行,再根据间接依赖的log4j在Hello中的配置,作用域为runtime,所以定位到第四列,第一行和第四列的交叉为runtime,所以传递到HelloFriend的log4j的<scope>作用域为runtime。
聚合与继承:
这些pom.xml中有很多重复的代码,重复代码一多,就要向上抽取,像java那样,抽取出一个父类。
因为之前的Hello,HelloFriend,MakeFriends里的pom.xml的重复代码太多,所以抽取出一个父类,其所有子类都继承这个pom.xml。
再建立一个maven工程,在子类中通过<parent>标签声明他的父类。
这是父类中的代码:
<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>//这里必须是pom <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>../web</module> </modules><dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>HelloFriend</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>MakeFriends</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> </dependencyManagement> <distributionManagement> <repository> <id>rd5</id> <name>rd5</name> <url>http://192.168.3.100:8080/nexus-2.1.2/content/repositories/rd5/</url> </repository> </distributionManagement> </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> <parent> <groupId>cn.itcast.maven</groupId> <artifactId>Parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../Parent/pom.xml</relativePath> //相对路径,从当前pom所在的路径 去找父类pom所在的路径,..表示返回上一级 </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>cn.itcast.cos</groupId> <artifactId>cos_wlp</artifactId> <version>2.0</version> </dependency> </dependencies></project>
- Maven与MyEclipse项目
- Maven——maven配置与Myeclipse创建maven项目
- maven 转myeclipse项目
- myeclipse创建maven项目
- myeclipse新建maven项目
- myEclipse创建maven项目
- MyEclipse创建maven项目
- MyEclipse 导入Maven项目
- Myeclipse创建maven项目
- maven项目导入myeclipse
- Myeclipse运行Maven项目
- MyEclipse搭建Maven项目
- myeclipse创建maven项目
- myeclipse创建maven项目
- MyEclipse搭建Maven项目
- myeclipse项目转maven项目
- Maven与MyEclipse整合
- Maven+SVN+Myeclipse项目构建
- Maven:生命周期及插件
- substring和substr的用法
- 开个博客试试!
- C++ - 复制构造器 和 复制-赋值操作符 的 区别
- test 特殊字符
- Maven与MyEclipse项目
- nor current process has android.permission.WRITE_APN_SETTINGS Proxy andriod,代理上网,wap网络请求有关问题
- UML用例图
- POJ1837:Balance
- Learning Standard C++ as a New Language ( By Bjarne Stroustrup )
- Android开发者指南-Drawable 动画-Drawable Animation[原创译文]
- java.String类replace函数的详解
- Natas.4744幽灵王病毒的分析
- Android HTTP实例:发送请求和接收响应的小demo