Maven私服与高级配置:提升企业级开发效率

传递依赖:

添加spring-webmvc的核心依赖坐标时,会发现以外的其他jar包。因为项目依赖spring-webmvc.jar,而spring-webmvc.jar会依赖spring-bean.jar等,所以依赖spring-webmvc.jar时它依赖的jar包也会出现在当前工程中,这种现象称之为传递依赖。

依赖调解原则:
  • 第一声明者优先原则:在pom文件定义依赖,先声明的依赖为准
  • 路径近者优先原则:在pom文件直接定义依赖比传递依赖优先
排除依赖:
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.9.RELEASE</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></exclusion></exclusions>
</dependency>
锁定版本:

面对众多依赖这种方法不需要考虑依赖路径,声明优先等因素,企业中常用:
如下配置锁定了spring-bean和spring-context的版本

<!-- 使用 <properties> 标签设置成变量 -->
<properties><spring.version>5.2.9.RELEASE</spring.version>
</properties><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency></dependencies>
</dependencyManagement>

注意:在工程中锁定版本号并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加标签如下

<!-- 在<dependencyManagement>中已经指定版本所以引入依赖时不需要指定版本 -->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency>
</dependencies>
分模块构建工程:
继承与聚合:

通常继承和聚合是同时使用。
**
**继承:**继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,如设置编译版本、锁定spring的版本等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。

**聚合:**项目开发通常是分模块开发,每个模块开发完成要运行整个工程,需要将每个模块聚合在一期运行,比如:dao、service、web三个工程最终会打一个独立的war包或jar包运行。

Maven私服:

私服指的是公司在内网环境下自己搭建的远程仓库。他还充当代理服务器,当私服上没有jar包时会从互联网中央仓库自动下载。

搭建私服环境:
  • 安装Nexus:Nexus是Maven仓库管理器,通过Nexus可以搭建maven仓库,同时Nexus还提供强大的仓库管理功能和构建的搜索功能等。下载地址:
  • 解压下载文件 bin目录执行安装脚本即可 配置文件:conf/nexus.properties
  • 默认账户和密码 admin/admin123
Maven私服仓库的类型:
  • hosted:宿主仓库,部署自己的jar到这个类型的仓库,包括release和snapshot两部分,Release公司内部发布版本仓库,Snapshot公司内部测试版本仓库
  • proxy:代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包。
  • group:仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组
  • virtual(虚拟):兼容maven1版本的jar

nexus 仓库默认在sonatype-work目录中:

  • central:代理仓库代理中央仓库
  • apache-snapshots:代理仓库,存储snapshots构建,代理地址:https://repository.apache.org/snapshots/
  • central-m1:virtual类型仓库
  • snapshot:本地仓库
  • thirdparty:第三方仓库
  • public:仓库组
将项目发布到私服:
  • 配置:修改settings.xml 配置连接私服的用户和密码
<!-- releases连接发布版本项目仓库 -->
<server><id>releases</id><username>admin</username><password>admin123</password>
</server>
<!-- snapshot连接测试版本项目仓库 -->
<server><id>snapshot</id><username>admin</username><password>admin123</password>
</server>
  • 配置项目pom.xml,配置私服仓库地址,根据公司自己jar包的版本号上传到私服的宿主仓库,若版本为release则上传到私服的release的仓库,若为snapshot则上传到私服的snapshot仓库
<!-- 注意:这里的<id> 和 settings.xml配置里的<id>对应 -->
<distributionManagement><repository><id>releases</id><url>http://localhost:8081/nexus.contetn.repositories/releases</url></repository><snapshotRepository><id>snapshots</id><url>http://localhost:8081/nexus.contetn.repositories/snapshots</url></snapshotRepository>
</distributionManagement><!-- 执行deploy命令即可 -->
从私服下载jar包:
  • 在settings.xml 中配置私服仓库,由于settings.xml 中没有repositories的配置标签,所以需要使用profile定义仓库。
<profile><!-- profile的id --><id>dev</id><repositories><repository><!-- 仓库的id,repositories可以配置多个仓库,保证id不重复 --><id>nexus</id><!-- 仓库地址 --><url>http://localhost:8081/repository/hsaf-public/</url><!-- 是否下载snapshots最新构件 --><snapshots><enabled>true</enabled></snapshots><!-- 是否下载releases最新构件 --><releases><enabled>true</enabled></releases></repository></repositories><!-- 插件仓库,maven的运行依赖插件,也需要从私服下载 --><pluginRepositories><pluginRepository><!-- 插件仓库的id不允许重复,如果重复后边覆盖前边 --><id>cs-plugin-central</id><url>http://121.36.70.71:8081/repository/hsaf-public/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></pluginRepository></pluginRepositories>
</profile><!-- 使用profile定义仓库需要激活才生效 -->
<activeProfiles><activeProfile>dev</activeProfile>
</activeProfiles>
  • 查看有效pom idea pom.xml文件右击 maven 最后一个 show Effective POM 查看是否生效即可
把第三方jar包放入本地仓库或私服
  • 导入本地库: mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0 -Dfile=E:\test\fastjson.jar -Dpackaging=jar
  • 导入私服:在maven核心配置文件settings.xml中配置第三方Server信息
<server><id>thirdparty</id><username>admin</username><password>admin123</password>
</server>

执行如下命令:mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0 -Dfile=E:\test\fastjson.jar -Dpackaging=jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty -DrepositoriesId=thirdparty

参数说明:

DgroupId和DartifactId构成了该jar包在pom.xml的坐标,
Dfile表示需要上传的jar包路径
Durl私服上仓库的位置 nexus–>repositories菜单可以看到路径
DrepositoriesId服务器的标识id nexus的configuration可以看到
Dversion 版本信息:
jar包准确版本信息:报的名字上会有,如果没有 解压包里面有个MANIFEST.MF的文件,这个文件里有描述该包的版本信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github上传大文件(>25MB)教程

0.在github中创建新的项目&#xff08;已创建可忽略这一步&#xff09; 如上图所示&#xff0c;点击New repository 进入如下页面&#xff1a; 1.下载Git LFS 下载git 2.打开gitbash 3.上传文件&#xff0c;代码如下: cd upload #进入名为upload的文件夹&#xff0c;提前…

docker安装部署mysql后忘记root密码

应用场景是&#xff1a;用docker安装完mysql后&#xff0c;使用安装时候设置的密码登录不上MySQL&#xff1b; 1、修改docker映射出mysql的配置文件&#xff1a;my.cnf 在mysqld最下方添加skip-grant-tables进入安全模式&#xff08;随意一个密码即可登录mysql&#xff09; [m…

Key exchange failed.No compatible key exchange method.

使用远程工具secureCRT (版本&#xff1a;Version 7.0.0 (x64 build 326) ) 连接Linux&#xff08;Ubuntu-22.04&#xff09;系统 若20之前的ubuntu系统版本参考&#xff1a;&#xff1a; &#x1f517;使用远程工具连接Linux系统 1、检查ssh-server版本 sudo dpk…

【御控物联】 JavaScript JSON结构转换(21):数组To对象——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

希亦、石头、添可洗地机哪个更好用?资深家电测评师多角度横评

作为一个测评了许多洗地机的家电测评师&#xff0c;有很多人问我&#xff0c;他想入手一款适合自己的家用洗地机&#xff0c;不知道怎么购买到自己合适的&#xff0c;结果自己跑去搜索后发现为什么有的洗地机几百块钱就能入手&#xff0c;而有的又得几千元&#xff0c;买贵的怕…

JS--demo2录入学生信息

实现学生信息录取。 效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-U…

golang特性1

golang特性 defer、recover异常捕获和处理 应用场景 1. 资源释放 文件操作&#xff1a;在打开文件后&#xff0c;使用 defer 关闭文件句柄&#xff0c;确保文件在函数退出时被关闭&#xff0c;避免资源泄漏。数据库连接&#xff1a;在打开数据库连接后&#xff0c;使用 def…

JS小项目-计算器

需求&#xff1a;根据素材制作如图所示页面&#xff0c;在页面输入第一个数和第二个数&#xff0c;单击&#xff08;加&#xff09;、&#xff0d;&#xff08;减&#xff09;、&#xff0a;&#xff08;乘&#xff09;、&#xff0f;&#xff08;除&#xff09;按钮时&#xf…

Your file appears not to be a valid OLE2 document

前言 org.apache.poi.poifs.filesystem.NotOLE2FileException:Invalid header signature; read 0x0000000000000000, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document解决 Excel兼容模式打开老版本文件造成文件损坏&#xff0c;大多说的是点…

vscode-tasks.json自定义任务

以下所有内容,参考自VScode官方文档: vscode_tasks-docs任务说明文档vscode_variables-reference-docs变量说明文档vscode addtional docs for tasksvscode launch.json 属性设置文档,(下文没有介绍,没有涉及) 浅浅记录一下个人对vscode任务(task)的理解,还谈不上使用. 文章目…

linux通配符

通配符&#xff0c;它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件。

IDEA new ui 找不到evaluate

问题 idea升级新版本之后&#xff0c;发现熟悉的evaluate不见了&#xff0c;只能通过快捷键启动&#xff0c;未免太麻烦了&#xff0c;如何像旧版一样添加图标直接点呢&#xff1f; 解决方案 打开debug窗口&#xff0c;在这个地方右键&#xff0c;然后选择add actions 搜索…

Mysql底层原理四:B+树索引

B树索引&#xff08;索引的原理&#xff09; 1.前言 前边我们详细唠叨了InnoDB数据⻚的7个组成部分&#xff0c;知道了各个数据⻚可以组成⼀个双向链表&#xff0c;⽽每个数据⻚中的记录会按照主键值从⼩到⼤的顺序组成⼀个单向链 表&#xff0c;每个数据⻚都会为存储在它⾥边…

【Web】纯萌新的CISCN刷题记录(1)

目录 [CISCN 2019华东南]Web11 [CISCN 2019华北Day2]Web1 [CISCN 2019初赛]Love Math [CISCN 2022 初赛]ezpop [CISCN 2019华东南]Double Secret [CISCN 2023 华北]ez_date [CISCN 2019华北Day1]Web1 [CISCN 2019华东南]Web4 [CISCN 2019华北Day1]Web2 [CISCN 2023 …

解决电脑无故自动关机或重启的15种方法,总有一种适合你

序言 你的Windows PC是否在没有警告的情况下关闭或重新启动?这背后有几个潜在的原因。例如,它可能是软件/硬件冲突、过热或硬盘驱动器错误。本故障排除指南将概述在Windows 10/11中修复自动关闭和重新启动的多个解决方案。 如果你的计算机经常关闭,则必须在安全模式下启动…

SSH免密登录 远程创建账户

初级代码游戏的专栏介绍与文章目录-CSDN博客 SSH免密登录是个很方便的功能&#xff0c;让你可以在一个节点上操作所有主机而不用输入用户名密码。当然这也是个安全隐患&#xff0c;操作节点密码泄露等于所有主机密码泄露。有利有弊&#xff0c;斟酌选择。 目录 一、原理 二、…

JMeter 常见函数讲解

当使用JMeter进行性能测试或负载测试时&#xff0c;函数是一个非常有用的工具&#xff0c;可以帮助生成动态的测试数据或处理测试结果。 下面是一些常用的JMeter函数的详细讲解和并列示例&#xff1a; 1、__threadNum&#xff1a; 返回当前线程的编号。可以在测试过程中用于…

2024/4/1—力扣—主要元素

代码实现&#xff1a; 思路&#xff1a;摩尔投票算法 int majorityElement(int *nums, int numsSize) {int candidate -1;int count 0;for (int i 0; i < numsSize; i) {if (count 0) {candidate nums[i];}if (nums[i] candidate) {count;} else {count--;}}count 0;…

C++学习笔记九--模版

目录 前言 1.函数模版 1.函数模版的概念和定义 2.函数模版的实例化 2.类模版 1.类模版的概念和定义 2.类模版的实例化 3.示例代码 前言 这篇文章介绍下C中的模版&#xff0c;包括函数模版和类模版。 1.函数模版 在编程的过程中&#xff0c;编写函数都会考虑将其写成模版…

静态中间继电器 HJZ-J908 AC380V 导轨安装 JOSEF约瑟

系列型号&#xff1a; HJZ-J902静态中间继电器&#xff1b;HJZ-J905静态中间继电器&#xff1b; HJZ-J907静态中间继电器&#xff1b;HJZ-J907L静态中间继电器&#xff1b; HJZ-J908静态中间继电器&#xff1b;HJZ-J909静态中间继电器&#xff1b; HJZ-J910静态中间继电器&…