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

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

<dependency><groupId><!-- 创建工程时hello-entity时填写的内容,可在其pom文件中查看--></groupId><artifactId>hello-entity</artifactId><version><!-- 这里如果是第一次创建工程一般为:0.0.1-SNAPSHOT--></version>
</dependency>

这里如果正确配置,即可在maven dependencies下看到hello-entity工程文件夹。【下图仅为举例】


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

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

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

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

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

<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.java.hello</groupId><artifactId>hello-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><modules><module>../hello-dao</module><module>../hello-service</module><module>../hello-web</module><module>../hello-entity</module></modules><properties><spring.version>4.1.7.RELEASE</spring.version><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version></properties><dependencyManagement><dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency></dependencies></dependencyManagement>
</project>

pom文件里,我们首先用modules表示各个字模块,”../“表示相对路径,因为parent工程与我们其他工程平级。接着,我们使用porperties来管理我们各个jar包的版本号,书写方式如上文示例。最后,在下面的dependencies中写入jar的名称即可。

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

<parent><groupId>com.java.hello</groupId><artifactId>hello-parent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../hello-parent/pom.xml</relativePath>
</parent>

写入之后,pom文件中出现的黄叹号行删除即可,这是由于继承关系已经自定的加入其中,不需要再写一遍。

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

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

特别备注:

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


Maven简明教程(4)---依赖关系(理论篇)相关推荐

  1. Maven简明教程(5)---依赖关系(实例篇)

    2019独角兽企业重金招聘Python工程师标准>>> [工欲善其事,必先利其器] 上文中,我们简单介绍了依赖关系的基本理论与配置方式.但是由于这个知识点在我们日后的开发过程中会经常 ...

  2. MAVEN查看jar包依赖关系

    MAVEN查看jar包依赖关系 进入project的pom.xml所在目录,运行mvn dependency:tree即可 Microsoft Windows [版本 10.0.18362.535] ...

  3. C++简明教程,看这一篇就够了!

    这篇文章是我从我简书那边复制过来的,懒得整理格式了,想看格式清晰一点的去这个链接看:https://www.jianshu.com/p/bd442e75d0b7 我的另一篇博客也对C++的基础的.关键 ...

  4. Idea创建maven父子工程及其依赖关系

    1.先不使用骨架创建maven项目 2.删除src目录,因为是父项目,所以不需要src 3.创建子工程 1.创建模块 2.创建完毕POM文件自动改变 4.父子工程之间的maven依赖 1.先不使用骨架 ...

  5. maven java管理_java – 依赖管理与maven

    我最近成了Maven的大粉丝,用于控制我的应用程序的构建周期.然而,我遇到了一些粗暴的边缘与Maven的依赖管理.我想知道这些是否是工具和范例的限制,依赖管理的必要的邪恶,或者我是否使用错误的工具. ...

  6. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图

    IntelliJ IDEA使用教程 (总目录篇) Maven 组件界面介绍 如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有: 第一个按钮:Reimport All Maven Pr ...

  7. Maven Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图

    原文地址: https://blog.csdn.net/qq_27093465/article/details/69226949 IntelliJ IDEA使用教程 (总目录篇) Maven 组件界面 ...

  8. Spring Data JPA教程:获取所需的依赖关系

    在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...

  9. andriod studio 查看项目依赖_Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图...

    Maven 组件界面介绍 如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有: 第一个按钮:Reimport All Maven Projects 表示根据 pom.xml 重新载入项 ...

最新文章

  1. 学了这些,他薪资涨了40%,收割了阿里、头条、快手等大厂的offer!
  2. 018:Django商城部署和数据库读写分离
  3. Spark Streaming(二)Flume
  4. [CF]Codeforces Round #529 (Div. 3)
  5. iOS开发 AVAudioPlayer
  6. D-query SPOJ - DQUERY (主席树)
  7. leetcode38. 外观数列
  8. Accelerated C++ 习题答案
  9. [转]static和final的区别
  10. 程序员10个必须有的Android应用程序
  11. 通过PS修出自然的大长腿
  12. linux运行360wifi,Linux(Ubuntu)下的无线网络卡上的小米和360wifi教程
  13. 【jQwidgets】简单封装示例
  14. 卡耐基:一个人的成功,只有15%是靠专业技术
  15. switch函数不加break的效果
  16. UCLA教授朱松纯:走向通用人工智能,从大数据到大任务
  17. osgEarth示例分析——osgearth_elevation
  18. excel用图标表示数据增减
  19. pyecharts:日历图实战
  20. centos挂载和取消挂载

热门文章

  1. 命令提示符(cmd)中的tracert命令详解
  2. 计算机组成原理——主存储器
  3. C++:全角和半角转化
  4. Gradle中的buildScript代码块 - 黄博文
  5. 数据结构中常用的排序算法总结
  6. SpringMVC项目添加日志
  7. Metasploit利用MS08-067漏洞
  8. 网站的验证码有什么作用?
  9. Unity中实现判断Missing还是Null
  10. 如何与客户高效地沟通需求