目录
- 一、分模块开发与涉及(重点)
 - 1.工程模块划分
 - 2.modules_common拆分
 - 3.modules_pojo拆分
 - 4.modules_dao拆分
 - 5.modules_service拆分
 - 6.modules_controller拆分
 - 7.总结
 
- 二、聚合(重点)
 - 1.多模块构建维护
 - 2.聚合
 
- 三、继承(重点)
 - 1.模块依赖关系维护
 - 2.继承
 - 3.继承依赖定义
 - 4.继承依赖使用
 - 5.继承的资源
 - 6.继承与聚合的区别
 
- 四、属性(重点)
 - 1.版本统一的重要性
 - 2.属性类别:自定义属性
 - 3.属性类别:内部属性
 - 4.属性类别:Setting属性
 - 5.属性类别:环境变量属性
 
- 五、版本管理
 - 1.工程版本区分
 - 2.工程版本
 - 3.工程版本约定
 
- 六、资源配置
 - 1.资源配置多文件维护
 - 2.配置文件引用pom属性
 
- 七、多环境开发配置
 - 1.多环境兼容
 - 2.多环境配置
 - 3.加载指定环境
 
- 八、跳过测试(了解)
 - 1.跳过测试环境的应用场景
 - 2.使用命令跳过测试
 - 2.使用界面操作跳过测试
 - 3.使用配置跳过测试
 
- 九、私服(重点)
 - 1.分模块合作开发
 - 2.Nexus
 - 1)Nexus下载
 - 2)Nexus启动
 - 3)Nexus修改端口
 - 4)Nexus修改服务器配置
 
- 3.私服资源获取
 - 4.仓库分类
 - 5.创建宿主仓库
 - 6.上传资源
 - 7.对用户/角色的操作
 - 8.idea环境中资源上传与下载
 - 9.访问私服配置
 - 1)本地仓库访问私服
 - 2)项目工程访问私服
 - 3)通过命令访问私服
 - 补充:如何通过命令将 jar 包推到本地仓库
 

一、分模块开发与涉及(重点)
拆分前项目地址:https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus
拆分后项目地址:https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-modules
1.工程模块划分
这里我们将一个典型的 spring mvc 项目的各个模块进行拆分,各模块之间通过接口进行通信。
(为了美观,我在图片上进行了顺序调整)

创建子模块的时候,可以在IDEA中直接右键项目文件夹,然后选择新建module:

2.modules_common拆分
-  
新建模块
 -  
拷贝原始项目中对应的相关内容到modules_common模块中
- 响应结果类(Result)
 - 依赖 
    
- lombok
 
 
 -  
将 <parent> 标签内容注释,并添加 <groupId> 和 <version> 标签
<groupId>com.demo</groupId> <artifactId>modules_common</artifactId> <version>1.0-SNAPSHOT</version> -  
执行
clean install,确保模块可以独立安装,不会报编译错误 
 
3.modules_pojo拆分
-  
新建模块
 -  
拷贝原始项目中对应的相关内容到modules_pojo模块中
- 实体类(User)
 - 依赖 
    
- mybatis-plus-boot-starter
 - modules_common(对modules_common模块执行install命令,将其安装到仓库后使用)
 
 
 -  
将 <parent> 标签内容注释,并添加 <groupId> 和 <version> 标签
<groupId>com.demo</groupId> <artifactId>modules_pojo</artifactId> <version>1.0-SNAPSHOT</version> -  
执行
clean install,确保模块可以独立安装,不会报编译错误 
因为我的 User.java 中使用到了一些 MybatisPlus 的注解,所以需要在 modules_pojo 中就添加 MyBatisPlus 的依赖,下面是我的 User.java:
package com.demo.module.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author ACGkaka
 * @since 2021-04-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_user")
public class TUser implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 用户名
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}
 
 
4.modules_dao拆分
-  
新建模块
 -  
拷贝原始项目中对应的相关内容到modules_dao模块中
- 数据层接口(UseMapper)
 - 配置文件: 
    
- 保留与数据层相关配置文件(2个:UserMapper.xml、application.yml)
 
 - 测试文件: 
    
- 保留测试程序中代码生成器测试类(CodeGenerateUtils.java)
 
 - 依赖 
    
- mysql-connector
 - druid-spring-boot-starter
 - mybatis-plus-generator
 - freemarker
 - 直接依赖modules_pojo(对modules_pojo模块执行install命令,将其安装到仓库后使用)
 - 间接依赖modules_common(由modules_pojo模块负责依赖关系的建立)
 
 - 将 <parent> 标签内容注释,并添加 <groupId> 和 <version> 标签
 
<groupId>com.demo</groupId> <artifactId>modules_dao</artifactId> <version>1.0-SNAPSHOT</version> -  
执行
clean install,确保模块可以独立安装,不会报编译错误 
 
5.modules_service拆分
-  
新建模块
 -  
拷贝原始项目中对应的相关内容到modules_service模块中
- 业务层接口与实现类(UserService、UserServiceImpl)
 - 依赖 
    
- 直接依赖modules_dao(对modules_dao模块执行install命令,将其安装到仓库后使用)
 - 间接依赖modules_pojo(由modules_dao模块负责依赖关系的建立)
 - 间接依赖modules_common(由modules_pojo模块负责依赖关系的建立)
 
 
 -  
将 <parent> 标签内容注释,并添加 <groupId> 和 <version> 标签
<groupId>com.demo</groupId> <artifactId>modules_service</artifactId> <version>1.0-SNAPSHOT</version> -  
执行
clean install,确保模块可以独立安装,不会报编译错误 
 
6.modules_controller拆分
-  
新建模块
 -  
拷贝原始项目中对应的相关内容到modules_controller模块中
- 业务层接口与实现类(UserService、UserServiceImpl)
 - 依赖 
    
- 直接依赖modules_service(对modules_service模块执行install命令,将其安装到仓库后使用)
 - 间接依赖modules_dao(由modules_service模块负责依赖关系的建立)
 - 间接依赖modules_pojo(由modules_dao模块负责依赖关系的建立)
 - 间接依赖modules_common(由modules_pojo模块负责依赖关系的建立)
 
 
 -  
将 <parent> 标签内容注释,并添加 <groupId> 和 <version> 标签
<groupId>com.demo</groupId> <artifactId>modules_controller</artifactId> <version>1.0-SNAPSHOT</version> -  
由于modules_controller还使用了 spring-boot-starter-web,因此需要继承 spring-boot-starter-parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> </parent> -  
启动modules_controller模块。
 
 
启动modules_controller模块后,我们可以看到日志中显示已经启动成功了:

浏览器调用服务接口,响应正常:

7.总结
- 分模块开发 
  
- 模块中仅包含当前模块对应的功能类与配置文件;
 - spring核心配置根据模块功能不同进行独立制作;
 - 当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用;
 - web.xml 需要加载所有spring核心配置文件(我们这里是SpringBoot项目,可以忽略)
 
 
二、聚合(重点)
1.多模块构建维护
我们进行多模块拆分之后,如果我们中间有一个模块,例如 dao 模块,那么依赖 dao 模块的模块并不能知道 dao 模块是否有更新,因此我们需要一个单独的模块来统一管理所有的模块。
 
2.聚合
-  
作用:聚合用于快速构建 maven 工程,一次性构建多个项目/模块。
 -  
制作方法:
-  
创建一个空模块,打包类型定义为pom。
<packaging>pom</packaging> -  
定义当前模块进行构建操作时关联的其他模块名称。
(如果在之前创建模块的时候,使用的是IDEA中右键->新建->模块的方式,会自动添加好相应的 module 配置)
<modules> <module>modules_common</module> <module>modules_pojo</module> <module>modules_dao</module> <module>modules_service</module> <module>modules_controller</module> </modules> 
 -  
 -  
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关。
 
三、继承(重点)
1.模块依赖关系维护
我们在进行多模块拆分之后,如果不同模块之间使用的是相同依赖的不同版本,切不同版本之间不能相互兼容的话,就会导致依赖冲突。
 
这时候,我们可以使用一个模块来统一管理依赖的版本号,其他的模块只需指定依赖的部分坐标即可,不需要指定依赖的版本号了。
 
2.继承
-  
作用:通过继承可以实现在子工程中沿用父工程中的配置
- Maven 中的继承与 Java 中的继承相似,在子工程中配置继承关系。
 
 -  
制作方式:
-  
在子工程中声明其父工程坐标与对应的位置
<!-- 定义该工程的父工程 --> <parent> <groupId>com.demo</groupId> <artifactId>springboot-mybatis-plus-modules</artifactId> <version>1.0-SNAPSHOT</version> <!-- 填写父工程的pom文件,默认为../pom.xml --> <relativePath>../pom.xml</relativePath> </parent> 
 -  
 
既然子工程会沿用父工程中的依赖,这里我们就会想到之前拆分好的 modules_controller 模块中指定了父工程为 spring-boot-starter-parent包。
按住 Ctrl 点击 artifactId 可以进入到相应模块的 pom.xml 配置文件中。
我们可以看到 spring-boot-starter-parent 的 pom.xml 内容如下,其中并没有引用其他的依赖,而是又继承了 spring-boot-dependencies 工程。

我们进入 spring-boot-dependencies 的 pom.xml 中,内容如下,发现其中也并没有引用其他的依赖,而是有一个<dependencyManagement> 标签:

可见父工程 spring-boot-starter-parent 主要是通过 spring-boot-dependencies 进行了一个依赖版本管理的功能,下面我们就可以删掉 spring-boot-starter-parent 父工程,自己指定 spring-boot-dependencies 进行配置管理即可。
3.继承依赖定义
-  
在父工程中定义依赖管理(注意:这里只是声明版本,并不真实引入)
<!-- 声明此处进行依赖管理 --> <dependencyManagement> <!-- 具体的依赖 --> <dependencies> <!-- spring boot 环境 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.4.5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 
4.继承依赖使用
-  
在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本。
<dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependencies> 
5.继承的资源
子工程可以从父工程中继承的资源如下:

看到这里,我们就可以把子模块的 groupId 和 version 去除掉了。
(一般情况下,子模块和父模块的组织ID和版本号保持一致,特殊情况也可以不一致)
6.继承与聚合的区别
- 作用 
  
- 聚合用于快速构建项目
 - 继承用于快速配置
 
 - 相同点 
  
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系只做到同一个pom文件中。
 - 聚合与继承均属于设计型模块,并无实际的模块内容。
 
 - 不同点 
  
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些。
 - 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己。
 
 
四、属性(重点)
1.版本统一的重要性
我们在项目依赖过程中,经常会需要用到多个版本相同的依赖,例如:

如何更好地统一对这些版本进行管理呢?
2.属性类别:自定义属性
-  
作用
- 等同于定义变量,方便统一维护。
 
 -  
定义格式:
<!-- 自定义属性 --> <properties> <spring.version>5.1.9.RELEASE</spring.version> <junit.version>4.12</junit.version> </properties> -  
调用格式:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> 
3.属性类别:内部属性
-  
作用
- 使用maven内置属性,快速配置
 
 -  
调用格式:
${basedir} ${version} <!-- 同${version},project.可以省略 --> ${project.version} 
4.属性类别:Setting属性
-  
作用
- 使用 Maven 配置文件 settings.xml 中地标签属性,用于动态配置
 
 -  
调用格式:
${settings.localRepository} -  
系统属性查询方式
mvn help:system 
查询系统属性,可以看到有两个分区:System Properties 和 Environment Variables。
- System Properties:就是我们说的系统属性。我们使用${等号前面的内容},就可以获取到等号后面的内容了。
 - Environment Variables:就是我们下面要说的环境变量。
 

5.属性类别:环境变量属性
-  
作用
- 使用 Maven 配置文件 settings.xml 中的标签属性,用于动态配置
 
 -  
调用格式:
${env.JAVA_HOME} -  
环境变量属性查询方式
mvn help:system 

五、版本管理
1.工程版本区分
 
2.工程版本
- SNAPSHOT(快照版本) 
  
- 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和实时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
 - 快照版本会随开发的进展不断更新。
 
 - RELEASE(发布版本) 
  
- 项目开发进入阶段里程碑后,想团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当亲发布版本内容,这种版本称为发布版本。
 
 
3.工程版本约定
- 约定规范: 
  
- <主版本>.<次版本>.<增量版本>.<里程碑版本>
 - 主版本:表示项目重大架构的变更,如:spring5 相较于 spring4 的迭代
 - 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞
 - 增量版本:表示有重大漏洞的修复
 - 里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试。
 
 - 范例: 
  
- 5.1.9.RELEASE
 
 
六、资源配置
1.资源配置多文件维护
我们在进行项目管理的时候,除了需要对依赖的版本进行管理之外,还需要对配置文件进行管理。例如:jdbc.properties

2.配置文件引用pom属性
-  
作用
- 在任意配置文件中加载pom文件中定义的属性。
 
 -  
调用格式:
${jdbc.url} -  
开启配置文件加载pom属性
<!-- 配置资源文件对应的信息 --> <resources> <resource> <!-- 设定配置文件对应的位置目录,支持使用属性动态设定路径 --> <directory>${project.basedir}/src/main/resources</directory> <!-- 开启对配置文件的资源加载过滤 --> <filtering>true</filtering> </resource> </resources> 
七、多环境开发配置
1.多环境兼容
我们在开发过程中,经常会需要在不同环境进行部署,比如开发环境、测试环境、生产环境等,那么在不同环境下就需要进行不同的配置。能不能通过 Maven 来实现多个环境下不同配置的切换呢?
 
2.多环境配置
在多环境下,我们可以通过 <profiles> 标签来指定不同环境的不同配置,以及默认使用哪个配置。
<!-- 创建多环境 -->
<profiles>
	<!-- 定义具体的环境:生产环境 -->
    <profile>
    	<!-- 定义环境对应的唯一名称 -->
        <id>pro_env</id>
        <!-- 定义环境中专用的属性值 -->
        <properties>
        	<property>
            	<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
            </property>
        </properties>
        <!-- 设置为默认配置 -->
        <activation>
        	<activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 定义具体的环境:开发环境 -->
    <profile>
    	<id>dev_env</id>
        ......
    </profile>
</profiles>
 
3.加载指定环境
-  
作用
- 加载指定环境配置
 
 -  
调用格式
mvn 指令 -P 环境定义id -  
范例
mvn install -P pro_env 
八、跳过测试(了解)
1.跳过测试环境的应用场景
- 整理模块功能未开发
 - 模块中某个功能未开发完毕
 - 单个功能更新调试导致其他功能失效
 - 快速打包
 - …
 
2.使用命令跳过测试
-  
命令
# 方式一(推荐) mvn 指令 -DskipTests # 方式二 mvn 指令 -Dmaven.test.skip=true- 方式一:执行 testResources、testCompile,只跳过 test。即编译并处理测试代码和测试资源文件,但是不执行测试。
 - 方式二:跳过 testResources、testCompile、test 这三个生命周期阶段。即:不处理测试资源文件、不便宜测试代码,也不执行测试。
 
 
2.使用界面操作跳过测试
 
3.使用配置跳过测试
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <!-- 设置跳过测试 -->
    	<skipTest>true</skipTest>
        <!-- 包含指定的测试用例 -->
        <includes>
        	<include>**/User*Test.java</include>
        </includes>
        <!-- 排除指定的测试用例 -->
        <excludes>
        	<exclude>*/User*TestCase.java</exclude>
        </excludes>
    </configuration>
</plugin>
 
九、私服(重点)
1.分模块合作开发

2.Nexus
- Nexus 时 Sonatype公司的一款 maven 私服产品。
 - 下载地址:https://help.sonatype.com/repomanager3/product-information/download
 
1)Nexus下载
打开下载地址,页面如下,我们选择 Windows 版本。

下载后文件如下:

解压后,文件内容如下:

2)Nexus启动
使用 cmd 控制台命令行,进入 nexus-3.52.0-01\bin 目录,执行如下命令启动:
# .exe可以省略
nexus.exe /run nexus
 
启动过程有点长,启动成功后控制台内容如下所示:

访问地址为:http://localhost:8081
访问nexus地址,加载页面如下:

加载成功后,页面如下,我们点击右上角的登录:

第一次登录会提示你 admin 用户密码的存放位置:
 
打开文件所在目录:

打开 admin.password 文件:

输入密码,点击登录即可:
 
第一次登陆后需要进行相应的设置,点击 Next:

修改密码后,点击 Next:
 
配置是否允许匿名访问,选择 Disable,点击 Next:
 
完成初始配置,点击 Finish。
 
3)Nexus修改端口
如果想修改端口,可以在 nexus-3.52.0-01\etc 目录下的 nexus-default.properties 文件中进行修改:

在这里修改端口,重启后即可生效:

4)Nexus修改服务器配置
打开 nexus-3.52.0-01\bin 目录中的 nexus.vmoptions 文件,可以对服务器的运行参数进行配置:(例如:-Xms指定最小运行内存,-Xmx指定最大运行内存)

3.私服资源获取
在项目中,一部分我们自己创建的包会放到私服仓库上,一部分像Spring这类公共的包会放到中央仓库上。

这样就需要配置两个服务器地址,能不能合并一下呢?
当然可以,我们把私服扩展一下,在私服中单独存在一个仓库用来存放从中央仓库中获取资源,这样我们连接一个服务器地址即可。

为了区分我们自己资源的正式版本和临时版本,还需要存在一个单独用来存放临时版本的仓库。

为了更方便的获取依赖的位置,我们可以创建一个仓库组,方便对统一仓库组的其他仓库进行中的资源配置。

4.仓库分类
- 宿主仓库 hosted 
  
- 用途:保存无法从中央仓库获取的资源,包括: 
    
- 自主研发
 - 第三方非开源项目
 
 
 - 用途:保存无法从中央仓库获取的资源,包括: 
    
 - 代理仓库 proxy 
  
- 用途:代理远程仓库,通过 nexus 访问其他公共仓库,例如中央仓库
 
 - 仓库组 group 
  
- 将若干个仓库组成一个群组,简化配置
 - 仓库组不能保存资源,属于设计型仓库
 
 
我们登录 Nexus 以后,可以看到页面上方有两个标签,左边是我们浏览资源用的,右边是设置 Nexus 服务器用的,默认是在左边。

在资源浏览页面的左边有四个标签,分别是:首页、搜索页面、浏览仓库、上传。我们对于仓库的浏览主要是在 Browse 页面中:

在 Browse 页面中,我们可以看到这里主要有三种图标,这三种图标就对应我们三种仓库:
-  
代理仓库:带有一个链接的图标。
 -  
宿主仓库:一个干净的图标。
 -  
仓库组:带有一个文件夹的图标。
 
5.创建宿主仓库
点击页面上方切换到服务器设置界面, 点击 Repositories -> Create repository

下拉,从 3 个 maven2 中选择 maven2 (hosted)

命名仓库,并选择对应的仓库类型,比如我创建一个用来存放发布版本的仓库叫:my-release

往下拉,选择 Create repository,创建仓库。

我们可以看到仓库已经创建成功了。

为了后续方便操作,我们把刚刚创建好的仓库,添加到 maven-public 仓库组中,回头我们直接访问 maven-public 就都可以访问了,不用挨个去找了。
点击 maven-public,往下拉可以看到右边是已经添加到群组中的仓库,我们把左边刚刚创建好的仓库移到右边,保存即可。

6.上传资源
仓库创建好了,接下来我们就要往仓库中传一些资源。
点击页面上方的方框,回到仓库浏览界面 Browse,点击我们刚才创建好的仓库。

点击 Upload component 进入上传界面。

将文件上传好,坐标信息填好后,就可以上传了。
注意:这里我创建的是 RELEASE 仓库,不要上传 SNAPSHOT 版本的 jar 包。

上传成功,点击 view it now。

就可以看到我们上传的内容在仓库中的信息了。


或者在 Browse 页面中,点击我们的仓库查看:

如果想在仓库中删除依赖,直接选择某个依赖或者某个包进行删除即可:
(删除之后不会立刻消失,需要刷新页面)

7.对用户/角色的操作
Nexus 还在服务器设置页面,提供了用户/角色的操作,有兴趣的可以自己扩展了解下:

8.idea环境中资源上传与下载
在页面上进行手工上传,主要是针对第三方的依赖进行操作,我们大部分情况下还是在 idea 中进行资源的上传与下载。

对于连接私服的地址、用户名和密码,我们在 maven 的 settings.xml 文件中进行配置:

9.访问私服配置
1)本地仓库访问私服
-  
配置本地仓库访问私服的权限(settings.xml)
<servers> <server> <id>my-release</id> <username>admin</username> <password>admin</password> </server> <server> <id>my-snapshots</id> <username>admin</username> <password>admin</password> </server> </servers> -  
配置本地仓库资源来源(settings.xml)
<mirrors> <!-- 之前配置的阿里云仓库 --> <mirror> <id>nexus-aliyun</id> <!-- 当需要访问中央仓库时,去阿里云仓库拿 --> <mirrorOf>central</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> <!-- 我们自己的私服仓库 --> <mirror> <id>nexus-mine</id> <!-- 所有的资源都从私服仓库拿 --> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public</url> </mirror> </mirrors> 
当仓库组在查找资源时会从上往下逐一查找,所以我们直接配置 maven-public 即可。

怎么获取配置里面的 url 路径呢,我们可以去 Browse 页面,有一列叫 URL,我们点击这里的 copy。

点击 Ctrl+C,就可以把路径拷贝下来了。

2)项目工程访问私服
-  
配置当前项目访问私服上传资源的保存位置(pom.xml)
<distributionManagement> <!-- 正式仓库 --> <repository> <id>my-release</id> <url>http://localhost:8081/repository/my-release/</url> </repository> <!-- 临时仓库 --> <snapshotRepository> <id>my-snapshots</id> <url>http://localhost:8081/repository/my-snapshots/</url> </snapshotRepository> </distributionManagement> -  
发布资源到私服命令
mvn deploy 
3)通过命令访问私服
mvn deploy:deploy-file -Dfile=文件路径  -DgroupId=所属组ID  -DartifactId=项目ID  -Dversion=版本号  -Dpackaging=打包形式 -Durl=上传仓库路径 -DrepositoryId=仓库名称
 
示例:这里我将一个 kettle 的 jar 包上传到我刚创建好的 my-release 仓库中,命令如下:
(kettle-core-7.1.0.0-12.jar 与命令行在同一级目录)
mvn deploy:deploy-file -Dfile=kettle-core-7.1.0.0-12.jar  -DgroupId=pentaho-kettle  -DartifactId=kettle-core  -Dversion=7.1.0.0-12  -Dpackaging=jar -Durl=http://localhost:8081/repository/my-release -DrepositoryId=my-release
 
执行结果:

补充:如何通过命令将 jar 包推到本地仓库
mvn install:install-file -Dfile=文件路径  -DgroupId=所属组ID  -DartifactId=项目名称  -Dversion=版本号  -Dpackaging=打包方式
 
示例:这里我将一个 kettle 的 jar 包上传到我的本地仓库中,命令如下:
mvn install:install-file -Dfile=kettle-core-7.1.0.0-12.jar  -DgroupId=pentaho-kettle  -DartifactId=kettle-core  -Dversion=7.1.0.0-12  -Dpackaging=jar
 
执行结果:

整理完毕,完结撒花~ 🌻




![[API]string常量池string常用方法StringBuilder类(一)](https://img-blog.csdnimg.cn/5c0ed022bd2f46958f266ff07387fd6e.png)














