maven 高级篇


1. maven的概念模型

  • 项目对象模型(Project Object Model)
    一个maven工程独有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。
  • 依赖管理系统(Dependency Management System)
    通过maven的依赖管理对项目所依赖的jar进行统一管理
<!--添加依赖的jar包-->
    <dependencies>
<!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
  </dependencies>

2. maven工程的拆分与聚合思想

  • 工程的拆分
    工程的拆分可以实现分模块开发与测试,可实现多线程开发与管理,提高工程代码复用度的同时也提高软件的开发速度与效率。比如:现在要使用maven工程对一个项目进行拆分,这时候就可以将dao拆解出来,形成独立的工程,同样service,action也都进行这样的拆分把工程拆分成独立的工程,将来要用到的时候就把它们的坐标给引进来就行了.
  • 工程的聚合
    我们的项目拆成多个子模块后,独立运行各个模块是无法完成软件项目的要求的,只有把它们都整合起来,分工合作才能完成工作。因此需要父工程来管理各个子模块,把它们聚合在一起运行,把dao,service,web打成一个独立的可运行的war包。
  • 继承的理解
    类似java类的继承,都是为了消除重复。子类继承父类,父类里有的方法和属性在子类中就不需要再定义和实现了,使用的时候直接调用父类就可以。我们把crm拆分后,有一个父工程,子工程(dao,service,web)要用到的依赖都可以在父工程(parentProject)的pom.xml先定义好,将来子工程在开发的时候就不需要再引坐标了。
  • 深度理解
    父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了

3. 依赖

查看项目web左边工程显示maven dependencies,此时可以看到:把dao也依赖进来了,这是因为:依赖具有传递性
由于A -> B, B -> C
所以 A -> C

依赖传递也是有范围的
子模块dao中添加junit的依赖,scrop为test,但在service中并不能使用junit

1、纵坐标:直接依赖
A 依赖 B,B 是 A 的直接依赖。
在 A 的 pom.xml 中添加 B 的坐标。
2、横坐标:传递依赖
B 依赖 C,C 是 A 的传递依赖。
3、中间部分:传递依赖的范围,A 依赖 C 的范围。

解决方法:
如果在依赖传递过程中,导致jar包丢失,我们的做法很简单,就是再导入一次坐标

依赖传递的原则
1.第一声明者优先原则
谁先申明,就用谁的。跟坐标代码的顺序有关

添加struts2-spring-plugin(版本)在前,spring-context(版本.RELEASE)在后。引入的是struts2中的spring-beans-版本
如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入的是spring 中的spring-beans-版本。

2.路径近者优先原则
struts2-spring-plugin(版本)跟spring-context(版本.RELEASE)都会添加spring-beans的依赖。如果这时我们直接加入新的依赖叫spring-beans.4.2.4.RELEASE,系统会直接引入spring-beans.4.2.4的版本。


4. 使用版本锁定实现解决冲突

<dependencyManagement>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    </dependency>
</dependencyManagement>

5. 定义版本常量

在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。

    <properties>		
		<spring.version>4.2.4.RELEASE</spring.version>
   </properties>
    <dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
    </dependencies>


6. Maven 中的坐标

俗称 gav:使用下面三个向量子仓库中唯一定位一个 Maven 工程

在项目中的 pom.xml 文件中,我们可以看到下面gav的定义:

1、groupid:公司或组织域名倒序

<groupid>com.zxw.maven</groupid>

2、artifactid:模块名,也是实际项目的名称

<artifactid>MavenZXW</artifactid>

3、version:当前项目的版本

<version>0.0.1-SNAPSHOT</version>


7. pom基本配置

依赖的详细配置
1、dependencies:一个 pom.xml 文件中只能存在一个这样的标签。用来管理依赖的总标签。

2、dependency:包含在dependencies标签中,可以有无数个,每一个表示一个依赖

3、groupId,artifactId和version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。

4、type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值是jar。

5、scope:依赖的范围,默认值是 compile。后面会进行详解。

6、optional:标记依赖是否可选。

7、exclusions:用来排除传递性依赖,后面会进行详细介绍。

猜你喜欢

转载自blog.csdn.net/W_litttle/article/details/83691076
今日推荐