一. Maven 两个项目的引用依赖
先来稍微用实例讲解一下,两个Maven jar类型的项目是如何进行依赖的, 感受一下,Maven的强大之处。
项目B 依赖于项目A 的某些类。
一.一 创建 项目A
(只是简单创建,不会创建的可以看第二章内容)
打开 eclipse, 文件—>新建—>其他–>找到Maven—>选择 Maven-Project
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>com.yjl</groupId> <artifactId>MavenA</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
在 MavenA 项目下,在 src/main/java 创建一个类 Hello, 里面返回一下老蝴蝶的名字。
package com.yjl; /** * @author 岳泽霖 */ public class Hello { public String getName(){ return "岳泽霖,花名 两个蝴蝶飞"; } }
一.二 创建项目B
与上面是同样的操作步骤。
在 src/main/java 中创建一个 MyHello 类。
package com.yjl; /** @author 岳泽霖 */ public class MyHello { public static void main(String []args){ Hello hello=new Hello(); System.out.println(hello.getName()); } }
会报 Hello 类没有找到的错误。
要想 MyHello 类可以调用 项目A里面的 Hello 类, 按照以前的做法,是将 项目A导出成 一个jar包,放置在 B 下面,添加到路径下,这样B 就可以引用了。 这一点也是与 Maven 一样的,但Maven 并不需要这么处理。
直接点击 MavenB 里面的 pom.xml ,选择第二个 Dependencies 选项卡,点击添加 依赖,搜索 MavenA, 发现可以搜索到,直接添加 Maven A依赖
就可以发现 在 pom.xml 中添加了依赖
<dependencies> <dependency> <groupId>com.yjl</groupId> <artifactId>MavenA</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
与创建 MavenA时的 pom.xml 里面的内容是一致的。
不需要 再将 MavenA 打包后放置在 MavenB里面。
一.三 更新项目,解决出错的常用方法
发现,这个时候,虽然添加了依赖,但还是显示报错。
不应该啊,已经添加 Hello.java 的依赖了啊 。 切记,一定要记住 Maven 工程中这种情况, 要更新一下 Maven项目。
选中项目B, 右键选中Maven, 选中 Update Project, 选中 MavenB, 进行确定即可。
这样,就发现项目A 已经导入进来了。
运行 MyHello.java , 以Application 的方式运行即可。控制台打印输出。
一.四 直接修改项目,直接更新Jar 包。
上面的,普通的项目也可以做到了,没有什么骄傲的啊。 如果这个时候再修改 项目A 里面的内容,即 项目A的 Hello.java 里面的getName() 方法, 项目B要引用该怎么办呢? 先将修改好的项目A重新导出 Jar包,然后再放置到 MavenB 里面,重新运行B.
而 Maven 完全不需要这样。
如果你修改 Hello.java 中getName() 的方法返回值,如:
public String getName(){ return "岳泽霖,原名岳建立"; }
这个时候,不需要任何操作,只需要直接去项目B 下运行 MyHello.java 即可,控制台会自动打印新的输出语句。
为什么可以直接运行呢,这就是 jar版本中 SNAPSHOT 快照的作用了。 关于快照的作用,可以看老蝴蝶第三章写的内容。
这只是Maven 强大的作用之一而已,而且是小小的之一。
Maven 的Jar项目,没有什么好讲的,主要的还是Web 项目。