maven

目录

分模块开发

依赖传递与冲突

依赖范围

聚合

继承 

属性

多环境

跳过测试

私服

maven生命周期


分模块开发

按照功能将项目进行拆分,每一层都可以单独维护,也可以很方便的被别人使用

        银行项目:银行柜台、取款机、网站、手机app对应不同的场景,因此需要按照功能拆分

按照模块拆分:

        如电商的项目中,有订单和商品两个模块,订单中需要包含商品的详细信息,所以需要商品的模型类,商品模块也会用到商品的模型类,这个时候如果两个模块中都写模型类,就会出现重复代码,后期的维护成本就比较高。我们就想能不能将它们公共的部分抽取成一个独立的模块,其他模块要想使用可以像添加第三方jar包依赖一样来使用我们自己抽取的模块,这样就解决了代码重复的问题,这种拆分方式就说我们所说的按照模块拆分

步骤
(1) 创建 Maven模块:将domain模块单独抽出来建一个项目 maven_03_pojo
(2) 书写模块代码
分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。拆 分方式可以按照功能拆也可以按照模块拆。
(3) 通过 maven 指令安装模块到本地仓库 (install 指令 )
团队内部开发需要发布模块功能到团队内部可共享的仓库中 ( 私服 )

(4)修改原项目的pom.xml文件添加domain项目的坐标进行jar包的引入

<dependencies>
        <dependency>
            <groupId> com.itheima </groupId>
            <artifactId> maven_03_pojo </artifactId>
            <version> 1.0-SNAPSHOT </version>
        </dependency>
  </dependencies>

依赖传递与冲突

依赖指当前项目运行所需的 jar ,一个项目可以设置多个依赖
依赖传递:A依赖了 B C,B C 有分别依赖了其他 jar 包,所以在 A项目中就可以使用上面所有jar包
依赖冲突 是指项目依赖的某一个 jar 包,有多个不同的版本,因而造成类包版本冲突
        特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
        路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
        声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
可选依赖:指对外隐藏当前所依赖的资源 --- 不透明,不让别人用自己所依赖的东西
<dependency>
<groupId> com.itheima </groupId>
<artifactId> maven_03_pojo </artifactId>
<version> 1.0-SNAPSHOT </version>
<!-- 可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递 -->
<optional> true </optional>
</dependency>
排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本---A 知道有 C的存在,主动将其排除掉( <exclusions> 标签

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其使用范围

作用范围:

  • 主程序范围内有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内
  • 是否参与打包(package指令范围内)   

聚合

背景:当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新, 此时可以使用聚合工程来解决批量模块同步构建的问题

聚合工程:通常是一个不具有业务功能的""工程(有且仅有一个pom文件),将多个模块组织成一个整体,同时进行项目构建;

项目打包方式为pom:说明该项目为聚合或继承项目

<groupId> com.itheima </groupId>
<artifactId> maven_01_parent </artifactId>
<version> 1.0-RELEASE </version>
<packaging> pom </packaging>
<!-- 设置管理的模块名称 -->
<modules>
        <module> ../maven_02_ssm </module>
        <module> ../maven_03_pojo </module>
        <module> ../maven_04_dao </module>
<modules>

继承 

继承 : 描述的是两个工程间的关系,与 java 中的继承相似,子工程可以继承父工程中的配置信
息,常见于依赖关系的继承。一般将子项目共同使用的 jar 包都抽取出来,维护在父项目的 pom.xml 中,若有的依赖子项目并不都需要,则放到依赖管理中去
作用:
        简化配置
        减少版本冲突
<!-- 配置当前工程继承自 parent 工程 -->
<parent>
        <groupId> com.itheima </groupId>
        <artifactId> maven_01_parent </artifactId>
        <version> 1.0-RELEASE </version>
        <!--设置父项目 pom.xml 位置路径,可以不写 -->
        <relativePath> ../maven_01_parent/pom.xml </relativePath>
</parent>
<dependencies>......</ dependencies >
1 <!--定义依赖管理, <dependencyManagement> 标签不真正引入jar包,而是配置可供子项目选择的jar包依赖, 子项目要想使用它所提供的这些jar包,需要自己添加依赖,并且不需要指定<version>
-->
2 <dependencyManagement>
3          <dependencies>
4                  <dependency>
5                         <groupId> junit </groupId>
6                         <artifactId> junit </artifactId>
7                          <version> 4.12 </version>
8                          <scope> test </scope>
9                  </dependency>
10          </dependencies>
11 </dependencyManagement>
dependencyManagement 标签中 jar 包版本发生变化,所有子项目中有用到该 jar 包的地方
对应的版本会自动随之更新,实现版本管理,方便维护
两种之间的作用 :
  • 聚合用于快速构建项目,对项目进行管理
  • 继承用于快速配置和管理子项目中所使用jar包的版本
聚合和继承的相同点 :
  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
  • 聚合与继承均属于设计型模块,并无实际的模块内容
聚合和继承的不同点 :
  • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
  • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

属性

在父工程中 properties 标签中维护的变量,包括五种
<!-- 定义属性 -->
<properties>
        <spring.version> 5.2.10.RELEASE </spring.version>
        <junit.version> 4.12 </junit.version>
        <mybatis-spring.version> 1.3.0 </mybatis-spring.version>
        <jdbc.url> jdbc:mysql://127.1.1.1:3306/ssm_db </jdbc.url>
</properties>
<dependency>
        <groupId> org.springframework </groupId>
        <artifactId> spring-jdbc </artifactId>
        <version> ${spring.version} </version> <!--用${key}来获取-->
</dependency>
1 <build>
2          <resources>
3          <!-- 设置资源目录,并设置能够解析 ${}-->
4                  <resource>
5                          <directory> ../maven_02_ssm/src/main/resources </directory>
6                          <filtering> true </filtering>
7                  </resource>
8                  <resource>
9                          <directory> ../maven_03_pojo/src/main/resources </directory>
10                        <filtering> true </filtering>
11                 </resource>
12 ...
13          </resources>
14 </build>

jdbc.properties配置文件中也可以引用maven属性 ,jdbc.url的值直接获取Maven配置的属性

jdbc.url = ${jdbc.url}

 

 多环境

两种方式实现不动文件快速切环境

  1. 父工程配置多个环境,并指定默认激活环境
  2. 命令行实现环境切换mvn install -P env_dep
<profiles>
    <!--开发环境-->
    <profile>
        <id>env_dep</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
        </properties>
        <!--设定是否为默认启动环境-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!--生产环境-->
    <profile>
        <id>env_pro</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
        </properties>
    </profile>
    <!--测试环境-->
    <profile>
        <id>env_test</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
        </properties>
    </profile>
</profiles>

跳过测试

  1. IDEA工具实现跳过测试 
  2. 配置插件实现跳过测试
<build>
        <plugins>
                <plugin>
                        <artifactId> maven-surefire-plugin </artifactId>
                        <version> 2.12.4 </version>
                        <configuration>
                                <skipTests> false </skipTests>
                                <!--排除掉不参与测试的内容-->
                                <excludes>
                                        <exclude> **/BookServiceTest.java </exclude>
                                </excludes>
                        </configuration>
                </plugin>
        </plugins>
</build>

   3.命令行跳过测试 

在pom.xml所在 目录下进行执行mvn package -D skipTests

私服

企业内部搭建一个类似于中央仓库的东西,把自己的内容上传上去,其他人就可以从上面下载jar包使用,用于解决团队内部的资源共享与资源同步问题

工具:Nexus,JFrog

以nexus为例,进入nexus-3.30.1-01\bin目录执行nexus.exe /run nexus,浏览器访问http://localhost:8081

本地仓库访问私服配置
<!--配置本地Maven对私服的访问权限-->
<servers>
    <server>
        <id>itheima-snapshot</id>
        <username>admin</username>
        <password>admin</password>
    </server>
    <server>
        <id>itheima-release</id>
        <username>admin</username>
        <password>admin</password>
    </server>
</servers>
<!--配置私服的访问路径-->
<mirrors>
    <mirror>
    <!--配置仓库组的ID-->
        <id>maven-public</id>
        <!--*代表所有内容都从私服获取-->
        <mirrorOf>*</mirrorOf>
        <!--私服仓库组maven-public的访问路径-->
        <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>
私服资源上传与下载
  1. 配置工程上传私服的具体位置
<!--配置当前工程保存在私服中的具体位置-->
<distributionManagement>
    <repository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--
>
        <id>itheima-release</id>
        <!--release版本上传仓库的具体地址-->
        <url>http://localhost:8081/repository/itheima-release/</url>
    </repository>
    <snapshotRepository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--
>
        <id>itheima-snapshot</id>
        <!--snapshot版本上传仓库的具体地址-->
        <url>http://localhost:8081/repository/itheima-snapshot/</url>
    </snapshotRepository>
</distributionManagement>

2.发布资源到私服

mvn deploy

maven生命周期

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值