[工欲善其事,必先利其器]
在本文中,我们来简单介绍maven中几个常见的概念,这些概念在日常开发中经常见到。各位看官可以下面的介绍作为参考知识。
-----------------------------------------------------------------------------------------------------------------------------------------
正文开始:
1.本地仓库与远程仓库
本地仓库:即我们本地jar存放的目录,正常情况下pom文件中存在的依赖关系都会在本地仓库中出现。即使本地暂时不存在,maven也会帮我们自动下载到本地目录。
远程仓库:即一个包括所有公有jar包的地址,我们项目中所有需要使用的jar包都会从此地址上寻找。
2.依赖关系
a.jar包的依赖关系:
如junit包,即使我们在pom文件中只配置了一个依赖关系,但是,我们在maven dependencies下能够看到2个jar包。这其实是maven帮助我们下载了junit包的依赖,而在开发时,我们不需要关心junit的依赖。我们以下面的关系来说明:
A----->B----->C----->D...
在使用时,我们如果只想使用A包,那个我们只需要引入A包即可。BCD等我们并不需要关心。
在如同一个项目中存在如下关系:
A----->B----->C----->D,X----->Y----->D
我们发现,A与X都依赖了D。此时,maven只会下载一个D供我们使用而不用关心重复。
b.项目的依赖关系:
在项目管理过程中,我们经常遇到的场景是MVC结构划分的系统。为此我们创建了不同的层次概念如controller层,dao层,service层等。对于这些内容常用的做法是用package来划分。这里,我们来介绍一种更加推荐的做法,使用maven管理这些不同的模块。
本例中我们使用的依赖关系图,如下:
这里实际来演示这个工程的各个模块会占据大量篇幅,因此,我们下面仅叙述步骤,即配置文件的配置方式,请各位看官自行创建工程来查看结果。
(1)以maven创建hello-entity工程,工程类型为quickstart。具体请参照前文。
(2)在src/main/Java下,自定义一个包,创建一个实体类,如User.java.
(3)以maven创建hello-dao工程,工程类型为quickstart。具体请参照前文。
(4)在src/main/java下,自定义一个包,创建一个接口或者类,如userDao.java.将User实体引入,此时会报错,请读者稍安勿躁。[这里读者可以根据需求来决定真实/模拟的访问数据库]
(5)以maven创建hello-service工程,工程类型为quickstart。具体请参照前文。
(6)在src/main/java下,自定义一个包,创建一个接口及实现类,如IUserSerivce.java,将UserServiceImpl.java来接入dao,此时会报错,请读者稍安勿躁。[这里读者可以根据需求使用spring等基础框架,或者仅作为外壳使用]
(7)以maven创建hello-web工程,工程类型为webapp。具体请参照前文。
(8)在src/main/java下,自定义一个包,创建一个controller,或者servlet,将IUserSerivce或者UserServiceImpl引入。此时会报错,请读者稍安勿躁。[这里读者可以根据需求使用spring等基础框架,或者使用servlet]
重点来了!!!我们接下来介绍各个工程的pom文件的配置。
(a)hello-entity工程,作为最底层的模块,起不需要配置别的依赖项。但是请在其pom文件上右键run as-->maven install
(b)hello-dao工程需要依赖hello-entity工程,需要在pom文件中加入下面的配置:
(c)类似的,我们在service层pom文件只写入dao层的依赖,在web层只写入service层的依赖。正如我们前文介绍的,我们只关心紧相邻的上一层,maven会帮助我们自动引入其他依赖。
c.最后,我们介绍一种常用的继承关系
对于上面工程中的依赖关系我们最好能够统一管理,这样能够防止不同模块之间可能存在的依赖项不同带来的风险,如版本号不同造成的差异等。
第一步,我们先创建一个hello-parent工程,创建工程时,请在前文步骤2中选择create a simple project。
第二部,在其pom文件中,写入所有子工程的依赖项,示例pom文件如下:
第三步:在子模块的pom文件中写入如下内容:
----------------------------------------------------------------------------------------------------------------------------------------------
至此,Maven简明教程(4)---依赖关系(理论篇)结束
特别备注:
上面的说明,我们没有以实际用例来说明,是因为一方面举例会涉及大篇幅的代码,另一方面,也会涉及到spring,servlet,数据库等方面的内容,与我们这里的主题相距甚远,还请各位读者能够谅解!