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

  1. 使用版本锁定实现解决冲突
<dependencyManagement>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    </dependency>
</dependencyManagement>
  1. 定义版本常量
    在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。
    <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>
  1. 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>
  1. pom基本配置
    依赖的详细配置
    1、dependencies:一个 pom.xml 文件中只能存在一个这样的标签。用来管理依赖的总标签。

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

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

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

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

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

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

Maven高级应用(依赖,聚合,继承)

依赖:(在当前项目的pom文件中引入要依赖的项目的坐标)

  <dependency>

      <groupId>cn.itcast.babasport</groupId>

      <artifactId>babasport-core</artifactId>

      <version>0.0.1-SNAPSHOT</version>

</dependency>

继承:

1.修改父项目的pom文件坐标,将jar改成pom

pom

2.修改子项目的pom文件,添加

<parent>

<groupId>cn.itcast.babasport</groupId>

<artifactId>parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

聚合:

修改父项目的pom文件

<modules>
<module>babasport-front</module>
<module>babasport-core</module>
<module>babasport-back</module>
</modules>
发布了55 篇原创文章 · 获赞 4 · 访问量 9861

猜你喜欢

转载自blog.csdn.net/weixin_45678915/article/details/103536064