maven私服搭建+maven高级特性+ssm整合分层构建工程+travel案例核心点记录

Posted ahcfl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven私服搭建+maven高级特性+ssm整合分层构建工程+travel案例核心点记录相关的知识,希望对你有一定的参考价值。

文章目录


基础知识:

1maven是一款管理项目的工具
  a.生命周期的管理,编译,测试,打包等等
  b.依赖管理,插件管理
  c.分模块构建

2.maven的坐标:用来引入依赖的
  通过groupId+artifactId+version三者合一去仓库寻找依赖

3.maven的仓库
	本地仓库:个人电脑上的仓库
	私服: 第三方公司搭建的服务器
	中央仓库: maven团队维护的

问题引入:

1.右侧爆红:

1.通过工具删除下载失败的资源(之前发过,但是需要编辑文件,修改文件中的路径是自己本地仓库的路径)
2.保持网络通畅(你们需要拔掉网线)
3.添加坐标配置,刷新,重新下载即可

2.atl+insert 快捷导入找不到依赖

在这里插入图片描述

一、私服搭建

1. 为什么搭建私服

在这里插入图片描述

问题:
	1.我们公司开发了jar包,其他项目组如何使用?
	2.公司不给我们开放网络,我们怎么下载依赖?

在这里插入图片描述

小结:

为什么搭建私服:
	方便我们公司自己管理依赖。

nexus软件的安装

步骤:
1.解压
2.执行文件

解压:
在这里插入图片描述

私服配置文件中的端口号:

在这里插入图片描述

双击或者鼠标右击,管理员执行

在这里插入图片描述

启动成功:

在这里插入图片描述

2. 私服的使用

访问首页

在这里插入图片描述

浏览器输入地址:http://localhost:8081/nexus

登录

默认用户名和密码:

用户名:admin
秘密法:admin123

登录成功
在这里插入图片描述

仓库介绍

私服中仓库类型的介绍:
group:组,所有仓库的入口
hosted:宿主仓库,用于管理非中央仓库的依赖
proxy: 代理,中央仓库的代理
virtual: maven1版本的支持,不用。

仓库介绍:
Public Repositories: 仓库组,所有仓库的统一入口。
3rd party: 宿主仓库,用于存放中央仓库没有并且是第三方公司开发的jar。
Apache Snapshots: 代理仓库,apache仓库的代理
central: 代理仓库,中央仓库的代理
Central M1 shadow : maven1版本的支持,不管
Releases: 宿主仓库,用来存放我们自己开发的依赖的发行版
Snapshots: 宿主仓库,用来存放我们自己开大的依赖的快照版

发行版(正式发布会):解决了快照版出现的bug,不会频繁的更新。
快照版(抢先体验):一些bug,会频繁的更新bug

仓库类型:

在这里插入图片描述

私服中各种仓库 和 仓库之间的关系

在这里插入图片描述

快照版和发行版:

在这里插入图片描述

小结:

常见仓库类型:
group:组,所有仓库的入口
hosted:宿主仓库,用于管理非中央仓库的依赖
proxy: 代理,中央仓库的代理

私服中的常见仓库:
Public Repositories: 仓库组,所有仓库的统一入口。
3rd party: 宿主仓库,用于存放中央仓库没有并且是第三方公司开发的jar。
central: 代理仓库,中央仓库的代理
Releases: 宿主仓库,用来存放我们自己开发的依赖的发行版
Snapshots: 宿主仓库,用来存放我们自己开大的依赖的快照版

发行版(正式发布会):解决了快照版出现的bug,不会频繁的更新。
快照版(抢先体验):一些bug,会频繁的更新bug

从私服下载资源

演示步骤:
1.删除本地仓库中mysql依赖。
2.修改私服中central代理的远程仓库为阿里云
3.修改maven的settings配置文件中,配置私服为我们自己搭建的私服
4.打开工程,引入被删除的mysql依赖,

1.删除本地仓库中mysql依赖。
在这里插入图片描述

2.修改私服中central代理的远程仓库为阿里云
在这里插入图片描述

阿里云私服地址: http://maven.aliyun.com/nexus/content/groups/public

3.修改maven的settings配置文件中,配置私服为我们自己搭建的私服
在这里插入图片描述

4.打开工程,引入被删除的mysql依赖,
在这里插入图片描述

在这里插入图片描述

问题:

如果配置了阿里云,也连接了网络,但是就是下载不成功。

在这里插入图片描述

将资源上传到私服

第三方宿主仓库 (3rd party)

用于存放阿里云没有但是是第三方开发的jar包。

演示:
1.自定义一个依赖,打成jar包,代表第三方公司的依赖
2.上传到3rd party
3.开启一个工程,引入这个依赖
4.查看引入情况即可

演示:
1.自定义一个依赖,打成jar包,代表第三方公司的依赖

2.上传到3rd party
在这里插入图片描述在这里插入图片描述

3.开启一个工程,引入这个依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YQN24eC4-1624416768054)(F:\\BaiduNetdiskDownload\\0、java127itcast\\java127spring\\day01-maven高级\\讲义\\assets\\1611716763897.png)]

4.查看引入情况即可

在这里插入图片描述

自定义快照版仓库

演示步骤:

1.自定开启maven工程,编写一个mylist工具类。并且打成jar包
2.在maven工程的settings.xml中配置远程仓库的登录用户名和密码
3.在maven的pom.xml中配置远程仓库的地址
4.deploy命令进行上传
5.再另起工程, 通过坐标引入

1.自定开启maven工程,编写一个mylist工具类。并且打成jar包
在这里插入图片描述

2.在maven工程的pom.xml中配置远程仓库的地址

<distributionManagement>
    <!--当前项目版本后缀为:RELEASES的上传目录-->
    <repository>
        <id>releases</id>
        <name>Internal Releases</name>
        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
    <!--当前项目版本后缀为:SNAPSHOT上传目录-->
    <snapshotRepository>
        <id>snapshots</id>
        <name>Internal Snapshots</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

3.在maven的settings.xml中配置用户名和密码

 <server>
        <!-- 仓库的唯一标识, -->
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>

在这里插入图片描述在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20210623110438764.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21tbW1tQ0pQ,size_16,color_FFFFFF,t_70

小结:

maven的settings.xml中配置用户名和密码时,仓库的唯一标识必须和maven的pom.xml的仓库的唯一标识一致。

问题1:

此处有一个问题:maven命令执行不成功。

因为我们maven的命令是依赖于maven的插件,本地仓库有插件,但是maven会去校验远程仓库是否有对应的插件。很明显,我们远程私服是自己刚搭建的,没有插件,所以命令执行失败。

解决办法:我们先删除本地的一个插件,然后在直接去执行命令,maven会自动校验远程,并且进行下载。

问题2:

pom.xml中配置如下内容

 <repositories>
        <repository>
            <!-- 私服的id -->
            <id>nexus</id>
            <!-- 自己的私服的公共入口 -->
            <url>http://192.168.14.69:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </releases>
            <snapshots>
                <!-- 允许从快照版仓库下载资源 -->
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

自定义发行版仓库

在这里插入图片描述

上传成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2LA34tO-1624416768061)(F:\\BaiduNetdiskDownload\\0、java127itcast\\java127spring\\day01-maven高级\\讲义\\assets\\1608434102974.png)]

其他公共私服地址

4、http://maven.aliyun.com/nexus/content/groups/public/  阿里云  (强力推荐)

5.https://mirrors.huaweicloud.com/repository/maven/ (华为云)

7、http://repository.jboss.org/nexus/content/groups/public  

二、maven高级

依赖范围

环境:
测试环境:test包下的代码
编译环境:书写java代码的环境。
运行环境:war+tomcat环境

依赖范围:
provide:作用于编译时和测试时,不做用于运行时。 例如servlet。因为tomcat已经提供了。
runtime: 作用于运行时和测试时,但是不作用于编译时。例如mysql驱动。
test:只需要作用于测试时。 例如junit
compile:默认值,作用于运行时,编译时,测试时。

绝大多数情况,依赖范围用的不好,只是造成资源的浪费,并不会有其他影响。
但是对于servlet的依赖范围,provide是必须要添加的,要不然会报错。

依赖传递

依赖传递:
如果A依赖于B,当我们引入依赖A的时候,maven会自动的引入A所依赖的B.

例如:
spring-context 依赖于spring-core等等。
所以我们引入spring-context,会自动的引入spring-core。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBvyIx5t-1624416768062)(F:\\BaiduNetdiskDownload\\0、java127itcast\\java127spring\\day01-maven高级\\讲义\\assets\\1608445879582.png)]

演示:

创建2个工程demo_01和demo_02,
demo_01依赖其他的jar包
demo_02依赖于demo_01.所以,根据传递依赖,demo_02也会依赖于其他jar包

在这里插入图片描述

依赖可选

A依赖于B,当我们引入A的时候,maven会自动的引入A所依赖的B。
对于我们来说,不一定需要B。所以如何解决。
1.依赖可选,A在引入B的时候,添加声明,B依赖是可选的。其他工程引入A的时候,就不会引入B了。
2.依赖排除,工程在引入A的时候,添加声明,不需要B依赖。所以就不会引入B依赖。

演示:

1.创建工程Demo_A,引入依赖Junit,配置依赖可选
2.创建工程Demo_B,引入工程Demo_A. 根据依赖传递,Demo_B应该自动的引入Junit.

在这里插入图片描述

1.1.创建工程Demo_A,引入依赖Junit,配置依赖可选,B工程引入A
在这里插入图片描述

2.A工程配置依赖可选
在这里插入图片描述

依赖排除

演示:

Demo_A工程直接引入junit,
Demo_B工程引入依赖Demo_A,Demo_B在引入Demo_A的时候,声明需要排除的依赖。

在这里插入图片描述

依赖冲突

Demo_A,Demo_B,Demo_C
Demo_A引入spring-context(5.0.6),依赖传递spring-core
Demo_B引入spring-core(4.1.2),
Demo_C引入Demo_A和Demo_B,Demo_C同时依赖spring-core的2个版本,版本冲突。

maven解决版本冲突的原则:
1.路径最短者优先。
2.路径相同,先声明者优先。

路径最短者优先演示:(ctrl+alt+u) 查看maven的依赖路径
在这里插入图片描述

路径相同先声明者优先

将Demo_A的依赖切换成spring-core的5.0.6的版本

在这里插入图片描述

三、ssm工程改造成分层构建

maven的继承和聚合是2个不一样的概念,此处我们分开讲,但是企业开发都是一起使用的。

maven的继承

为什么需要继承

java中的继承:用于抽取共性代码的
maven的继承:用于抽取公共配置的,例如:依赖。
   
 maven的继承:
 1.用于抽取公共配置
 2.方便所有子工程的依赖版本的统一维护
 3.父工程中,没有java代码。

在这里插入图片描述

maven继承的演示

步骤:
1.创建父工程Demo_parent,声明打包方式为pom.(idea工具做好了)
2.创建子工程Demo_child_A,通过标签声明父工程(idea工具做好了)
3.父工程引入依赖,mysql依赖

步骤:
1.创建父工程Demo_parent,声明打包方式为pom.(idea工具做好了)

2.创建子工程Demo_child_A,通过标签声明父工程(idea工具做好了)
在这里插入图片描述

此时继承相关配置,idea全部都自动配置好了

父工程打pom包
在这里插入图片描述

子工程中需要声明父工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivHme6NT-1624416768074)(F:\\BaiduNetdiskDownload\\0、java127itcast\\java127spring\\day01-maven高级\\讲义\\assets\\1608449730476.png)]

3.父工程引入依赖,mysql依赖
在这里插入图片描述

继承的一些应用

父工程中:
1.针对于所有子工程需要的依赖,才去<dependencies>中声明,方便所有子工程的继承。
2.非所有子工程需要的依赖,我们在<dependencyManagement>声明,只会锁定版本,不会真的引入
   哪个子工程需要,再次编写坐标(不包含version)配置引入
3.所有依赖的版本统一在<properties>中声明。
4.插件也是上述管理操作
  

父工程配置:

<?xml version="1.0" encoding="UTF-8"?>
<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.itheima</groupId>
    <artifactId>maven_parent</artifactId>
    <!-- 父工程必须打pom包 -->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <!-- 声明子模块-->
    <modules>
        <module>maven_child1</module>
        <module>maven_child_user</module>
    </modules>



    <!--
        maven中继承的实际应用:

        强调:
            1.maven的继承是用来抽取公共的配置的
            2.父工程中没有java代码,只有一个pom.xml


        继承的实际使用细节:
        1.<dependencies>中,只会声明一些所有子工程都需要的依赖,例如:junit,或者一些其他工具包
        2.对于非所有子模块需要的依赖,我们统一声明到<dependencyManagement>标签中,
            用来锁定版本,然后子工程要用,再去引入即可。
        3.针对于所有的依赖,或者插件,或者模块的版本号,我们统一的在<properties>中进行声明,统一管理。
    -->


    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
    </dependencies>



    <!-- 依赖管理,只是用来锁定依赖的版本的,不会真的去引入依赖。一般都是用在父工程中的-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 依赖版本的统一管理-->
        <mysql.version>5.1.38</mysql.version>
        <junit.version>4.12</junit.version>
    </properties>
    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- tomcat7插件,命令: mvn tomcat7:run -DskipTests -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <uriEncoding>utf-8</uriEncoding>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

子工程配置

在这里插入图片描述

maven的聚合(多模块开发)

在这里插入图片描述

maven的聚合:多模块开发。
当我们的工程比较庞大的时候,此时我们一个开发者负责一个模块。
而我们之前的工程,所有的代码全部放在一起。此时也就意味着我哪怕负责单个模块,也需要将所有的代码拉取到本地。而且如果不小心动了其他模块的代码呢。
所以在针对于上述这些情况,我们针对我们的工程进行分模块构建,
例如:用户模块单独做成一个工程,订单模块单独做成一个工程,
	A组负责用户模块的开发
	B组负责订单模块的开发。
好处:
1.方便企业开发的分工合作
2.方便分布式项目的管理

说白了:maven的聚合就是将一个工程,拆分成多个工程进行管理。
如何拆分:
1.纵向拆分:
	按照项目的层次结构进行拆分。service层作为一个模块,dao层作为一个模块。	
2.横向拆分:
	按照功能模块进行拆分,用户模块,订单模块,物流模块,支付模块

上述继承时,已经使用了聚合了。
在这里插入图片描述

父工程中自动添加了子模块的声明:

在这里插入图片描述

在这里插入图片描述

小结:

企业开发模块和继承一起使用

ssm工程分层构建

步骤:
1.按照层次结构去拆分:

    1.ssm_parent: 父工程
    2.ssm_web: web工程,包含了controller层
    3.ssm_service: service层
    4.ssm_dao:dao层
    5.ssm_pojo:实体层

2. 设置工程的打包方式
	父工程打pom包,web工程打war包,其他工程打jar包

3. 配置模块和模块之间的依赖关系

4. 移植代码

5.测试即可

步骤:
1.按照层次结构去拆分:

1.ssm_parent: 父工程
2.ssm_web: web工程,包含了controller层
3.ssm_service: service层
4.ssm_dao:dao层
5.ssm_pojo:实体层

2.设置工程的打包方式
父工程打pom包,web工程打war包,其他工程打jar包

3.配置模块和模块之间的依赖关系
在这里插入图片描述

dao依赖于pojo

service依赖于dao

web依赖于service

web工程需要的代码

4.移植代码
在这里插入图片描述

父工程的pom.xml,依赖管理偷懒

<?xml version="1.0" encoding="UTF-8"?>
<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.itcast</groupId>
    <artifactId>ssm_parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>ssm_pojo</module>
        <module>ssm_dao</module>
        <module>ssm_service</module>
        <module>ssm_web</module>
    </modules>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- 父工程声明所有子模块的版本号-->
        <ssm.version>1.0-SNAPSHOT</ssm.version>
    </properties>

    <dependencies>
        <!-- 驱动-->
        <dependency>
            <groupId>mysql</groupIddocker搭建maven私服(nexus3),整合springboot上传下载依赖

MAVEN总结,整合Eclipse以及配置私服

MAVEN总结,整合Eclipse以及配置私服

ssm+maven(模块化)框架搭建(下)---ssm整合

在Eclipse中利用maven整合搭建ssm框架

Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加