Maven(四)-依赖关系(理论篇)

[工欲善其事,必先利其器]

在本文中,我们来简单介绍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文件中加入下面的配置:

[html]  view plain  copy
 
  1. <dependency>  
  2.     <groupId>groupId>  
  3.     <artifactId>hello-entityartifactId>  
  4.     <version>version>  
  5. dependency>  
这里如果正确配置,即可在maven dependencies下看到hello-entity工程文件夹。【下图仅为举例】


(c)类似的,我们在service层pom文件只写入dao层的依赖,在web层只写入service层的依赖。正如我们前文介绍的,我们只关心紧相邻的上一层,maven会帮助我们自动引入其他依赖。

c.最后,我们介绍一种常用的继承关系

对于上面工程中的依赖关系我们最好能够统一管理,这样能够防止不同模块之间可能存在的依赖项不同带来的风险,如版本号不同造成的差异等。

第一步,我们先创建一个hello-parent工程,创建工程时,请在前文步骤2中选择create a simple project。

第二部,在其pom文件中,写入所有子工程的依赖项,示例pom文件如下:

[html]  view plain  copy
 
  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.0modelVersion>  
  4.     <groupId>com.java.hellogroupId>  
  5.     <artifactId>hello-parentartifactId>  
  6.     <version>0.0.1-SNAPSHOTversion>  
  7.     <packaging>pompackaging>  
  8.   
  9.     <modules>  
  10.         <module>../hello-daomodule>  
  11.         <module>../hello-servicemodule>  
  12.         <module>../hello-webmodule>  
  13.         <module>../hello-entitymodule>  
  14.     modules>  
  15.   
  16.     <properties>  
  17.         <spring.version>4.1.7.RELEASEspring.version>  
  18.         <junit.version>4.12junit.version>  
  19.         <log4j.version>1.2.17log4j.version>  
  20.     properties>  
  21.   
  22.     <dependencyManagement>  
  23.         <dependencies>  
  24.             <dependency>  
  25.                 <groupId>log4jgroupId>  
  26.                 <artifactId>log4jartifactId>  
  27.                 <version>${log4j.version}version>  
  28.             dependency>  
  29.             <dependency>  
  30.                 <groupId>junitgroupId>  
  31.                 <artifactId>junitartifactId>  
  32.                 <version>${junit.version}version>  
  33.                 <scope>testscope>  
  34.             dependency>  
  35.             <dependency>  
  36.                 <groupId>org.springframeworkgroupId>  
  37.                 <artifactId>spring-coreartifactId>  
  38.                 <version>${spring.version}version>  
  39.             dependency>  
  40.         dependencies>  
  41.     dependencyManagement>  
  42. project>  
pom文件里,我们首先用modules表示各个字模块,”../“表示相对路径,因为parent工程与我们其他工程平级。接着,我们使用porperties来管理我们各个jar包的版本号,书写方式如上文示例。最后,在下面的dependencies中写入jar的名称即可。

第三步:在子模块的pom文件中写入如下内容:

[html]  view plain  copy
 
  1. <parent>  
  2.     <groupId>com.java.hellogroupId>  
  3.     <artifactId>hello-parentartifactId>  
  4.     <version>0.0.1-SNAPSHOTversion>  
  5.     <relativePath>../hello-parent/pom.xmlrelativePath>  
  6. parent>  
写入之后,pom文件中出现的黄叹号行删除即可,这是由于继承关系已经自定的加入其中,不需要再写一遍。

----------------------------------------------------------------------------------------------------------------------------------------------

至此,Maven简明教程(4)---依赖关系(理论篇)结束

特别备注:

上面的说明,我们没有以实际用例来说明,是因为一方面举例会涉及大篇幅的代码,另一方面,也会涉及到spring,servlet,数据库等方面的内容,与我们这里的主题相距甚远,还请各位读者能够谅解!

你可能感兴趣的:(Maven)