Maven详解及eclipse搭建简单maven父子工程

  • 一、前言
  • 二、Maven的作用
  • 三、pom.xml
  • 四、Maven入门使用常见问题
  • 五、Eclipse搭建Maven父子工程

Maven

**一、前言**

Maven:核心功能是合理叙述项目间的依赖关系,就是通过pom.xml文件的配置来获取jar包,而不用手动去添加jar包。

**二.Maven的作用**
  1. 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包?
  2. 每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范。
    因此,我们就要用到Maven----一个项目管理工具。

Maven主要做了两件事:

  • 统一开发规范与工具
  • 统一管理jar包

下面我们来对比一下,首先建立一个普通的Java工程,是这样的:

Maven详解及eclipse搭建简单maven父子工程_第1张图片

这个我们都很熟悉,src下建包写代码,那么配置文件放在哪里?单元测试代码放在哪里?没有一个统一标准,更多时候都是开发者的自由发挥,每个人有自己的风格,这并不十分适合团队协作。接下来,看一下使用maven构建一个普通Java项目之后的目录结构:
Maven详解及eclipse搭建简单maven父子工程_第2张图片

看到使用Maven构建的普通Java项目,对源代码、单元测试代码、资源乃至后续需要的文件都有专门的目录规划。

上面的最后有一个pom.xml,这是Maven的核心配置文件,pom称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。

当然事情不会这么简单,接下来,继续进入Maven的世界吧。

**三、pom.xml** 打开pom.xml,最基础的是这样的:

  4.0.0
  com.demo
  demo
  0.0.1-SNAPSHOT
  pom
  
  	demo_base
  	demo_web
  


子工程:

  4.0.0
  
    com.demo
    demo
    0.0.1-SNAPSHOT
  
  demo_web
  war

这是Maven的核心文件:

1、modelVersion
指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0。

2、groupId
  一般来说groupId是由三个部分组成,每个部分之间以".“分隔,第一部分是项目用途,比如用于商业的就是"com”,用于非营利性组织的就是"org";第二部分是公司名,比如"tengxun"、“baidu”、“alibaba”;第三部分是你的项目名。

3、artifactId
  可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式。

4、version
  版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。其中groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要。

在上面的这些元素之外,还有一些元素,同样罗列一下:

1、packing
  项目打包的类型,可以使jar、war、pom,默认是jar。

2、dependencies和dependency
  前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。

说到这里,就有一个本地仓库和远程仓库的概念了。
  本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。

举个例子,比方说我的项目中用到了MyBatis,那么可以这么配置:


    
        org.mybatis
        mybatis
        3.2.5
    

之前有说过groupId、artifactId、version唯一标识一个Maven项目,有了这三个元素,我们就可以去远程仓库下载MyBatis3.2.5.jar到本地仓库了。回想我们之前的做法,如果要MyBatis的jar包,发现没有,然后去网上下载一个,需要另外的jar包,然后去网上下载一个,但是有了Maven,就方便多了,只需要配置jar包对应的dependency依赖,Maven会自动帮助我们去远程仓库中下载jar包到本地仓库中。

3、properties
  properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。

4、build
  build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。

**四、Maven入门使用常见问题**

1、我从SVN上下载了一个以Maven构建的工程,下载完毕没有jar包怎么办?

从资源库上下载下来的Maven工程,是没有jar包的,此时可以这么做:

(1)删除Maven工程,但是删除的时候不要删除本地工程里面的Maven工程,只删除MyEclipse或Eclipse中的Maven工程

(2)右键Import->Maven4MyEclipse->Existing Maven Projects,导入你的Maven工程,此时MyEclipse在构建工程的时候,假如你的本地仓库中没有dependcy中的jar包,便会去远程仓库下载jar包到本地仓库中。你的工程导入完毕之后,Library应该是这样的:

2、重新下载Maven工程所依赖的jar包、导入jar包都需要触发Maven工程的build workspace,那么如何才能触发Maven工程的build workspace?

找到一个pom.xml,随便修改一下,加一个空格、减一个空格什么的,ctrl+s保存一下,便会触发Maven工程的build workspace了

3、本地仓库的目录结构是什么样子的?

groupId、artifactId、version确定一个唯一的Maven,比方说我有一个mybatis的dependcy:

org.mybatis mybatis 3.2.5 那么mybatis的jar包应该在%Maven仓库地址%\org\mybatis\mybatis\3.2.5\这一路径下,看到了吧,先groupId,再mybatis,最后version,每个名字都是一个文件夹的名字

4、有些jar包在dependcy里面有配置,Import了Maven工程,下载完工程所依赖的jar包之后,发现本地仓库里面却没有,怎么办?

可能是原先下载jar包的时候出了什么问题,从artifactId目录开始删除以下的所有文件/文件夹,然后触发一次Maven工程的build workspace就可以了

5、本地仓库中确定已经有jar包了,工程里面却报错,说找不到jar包,该怎么办?

应该有很多解决办法,目前解决的一种办法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex点一下就好了。另外,可以尝试一下把本地Maven仓库内的jar包删除一下,然后重新build workspace,可能也可以。

6、Eclipse中的maven module和maven project的关系相当于父子关系。
当新建的项目中不存在父子关系时使用maven project。
当项目中存在父子关系时用project做父工程,module做子工程,module工程必须有父工程。

**五、Eclipse搭建Maven父子工程** 1、什么是Maven父子工程
  • 父工程:父工程又称为父控制器,只是一个简单的工程,不能单独运行。作用是将子模块跟子工程聚合在一起。父控制器中的pom.xml配置,在子模块跟子工程中都可以被继承。
  • 子工程:项目中创建的具有业务逻辑并且可以单独部署的的子模块称为子工程,一个项目中不同的子工程通过在pom.xml中添加同一个父工程而整合在一起。
  • 子模块:提取出了一些子工程中通用的模块,做成jar包。当子工程需要使用的时候只要在pom.xml中添加依赖就好了。

1、创建父工程
(1).打开eclipse,右键new->project,找到maven,选择maven Project点击next。
勾选创建一个简易工程Create a simple project
Maven详解及eclipse搭建简单maven父子工程_第3张图片
(2).填写组名跟项目名,注意packaging一定要选择pom!Finish。
Maven详解及eclipse搭建简单maven父子工程_第4张图片
(3).父控制器创建好之后,删除自动生成的src文件夹 。
Maven详解及eclipse搭建简单maven父子工程_第5张图片
2、创建子工程
(1).选中刚刚创建的maven项目右键new->project,找到maven,选择maven Module点击next。
Maven详解及eclipse搭建简单maven父子工程_第6张图片
(2).Module Name填写自己的子项目名,点击next 。
Maven详解及eclipse搭建简单maven父子工程_第7张图片
(3).一般的jar工程选择maven-archetype-quickstart模板,web工程选择maven-archetype-webapp模板。选完之后next 。
Maven详解及eclipse搭建简单maven父子工程_第8张图片
(4).Package里是系统默认生成的包,建议改成自己的包名,修改完点finish。
Maven详解及eclipse搭建简单maven父子工程_第9张图片
(5).这样就创建好了一个子模块,如果要创建多个子模块重复上面的步骤即可。
这里我创建了1个jar工程1个web工程。如图:
Maven详解及eclipse搭建简单maven父子工程_第10张图片
(6).为什么要使用父子工程
相比于原先的创建项目方式,我认为有以下优点:

父子工程对于模块的分离程度更高了
看一个例子:
按照以往的创建项目方式,一个maven项目就是一个大工程,一开始还能进行简单的测试编译,但是随着项目的不断变大和复杂化,后期再做改动则可能牵一发而动全身。但是使用父子工程,每个模块都是独立的,他们通过父控制器聚合在一起,这样当你要改动一个模块的时候你改动的也只是这一个模块而已,并不会影响其他的模块。

父子工程使代码更清晰,提高了重用
看一个例子:
父控制器的存在之一就是为了去除重复
一个项目存在多个模块,可能同时由多个人开发,比如abc3个模块,3个模块都是基于spring的那么3个开发都需要引入spring的核心jar包,这样就引入了3份,但是使用父子工程,则只需要在父工程中引入了,则子工程自动继承。
注意:
新创建的maven项目会出现一些报错信息:

  1. pom.xml会报一些jar找不到的错误:这个时候右键项目–》build path–》:
    Maven详解及eclipse搭建简单maven父子工程_第11张图片
    如果Maven Dependencies报错有红叉,点开看看那个jar找不到,看看对应的路径里面有没有,如果没有添加进去。

  2. maven工程依赖的jar包,在本地仓库有,但是pom.xml文件却报错找不到jar包
    例如:Missing artifact com.ibm.db2:db2jcc_license_cisuz:jar:10.1
    但在我本地的仓库中却存在这个jar包,解决方法:

在eclipse中的window->show view->other->maven Repositories打开maven Repositories视图,
然后在maven Repositories视图中选中local Repositories->Local Repository, 右键选择Rebuild Index;
3. 如果经过上面的方法后pom.xml文件还报错有红叉,可以试试右键run as -maven install或者clean install进行再次编译,然后maven-update project更新下项目,红叉会不会消失。
Maven详解及eclipse搭建简单maven父子工程_第12张图片
有的时候像这种本地明明有jar包,但是pom.xml还报找不到jar包的错误,试了以上各种方法依旧不行,有的时候重启多试几次不知道怎么回事就好了,也是晕乎乎的了


你可能感兴趣的:(Maven,Springboot)