随笔 - 434,  文章 - 0,  评论 - 463,  阅读 - 46万

什么是maven私服?

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

Maven 私服的 5 个特性:

1、节省自己的外网带宽:减少重复请求造成的外网带宽消耗。

2、加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低。

3、部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 Maven 项目使用。

4、提高稳定性,增强控制:Internet 不稳定的时候,Maven 构建也会变的不稳定,一些私服软件还提供了其他的功能。

5、降低中央仓库的负荷:Maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力。

什么是 Maven 仓库?

Maven 的仓库只有两大类:

1、本地仓库。 2、远程仓库。

在远程仓库中又分成了 3 种:

中央仓库。

私服。

其它公共库。

Maven 会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。

但中央仓库只有一个,最好从其镜象处下载。国内可以用阿里云下的服务器。【其它公共库】 也有通过 Nexus 搭建的私服进行获取的。【私服】

如何解决 jar 冲突?

遇到冲突的时候第一步,要找到 Maven 加载的到时是什么版本的 jar 包,通过们 mvn dependency:tree 查看依赖树,或者使用 IDEA Maven Helper 插件。

然后,通过 Maven 的依赖原则来调整坐标在 pom 文件的申明顺序是最好的办法,或者使用将冲突中不想要的 jar 引入的 jar 进行 掉。

简单说一下Maven 依赖原则

1、赖路径最短优先原则。

一个项目 Demo 依赖了两个 jar 包,其中 A-B-C-X(1.0) , A-D-X(2.0) 。由于 X(2.0) 路径最短,所以项目使用的是 X(2.0) 。

2、pom文 件中申明顺序优先。

如果 A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,Maven 会根据 pom 文件声明的顺序加载,如果先声明了 B ,后声明了 C ,那就最后的依赖就会是 X(1.0) 。

3、覆写优先

子 pom 内声明的优先于父 pom 中的依赖。

Maven 坐标的含义?

<groupId>junit</groupId> 
<artifactId>junit</artifactId> 
<version>4.13-BETA</version>

Maven 给我们制定了一套规则 —— 使用坐标进行唯一标识。Maven 的坐标元素包括 groupId、artifactId、version、packaging、classfier 。

在我们自己开发项目的时候,也是要给我们的项目定义坐标的,这是强制性要求,只有这样,其他项目才能引用该项目的构件。

groupId :定义当前 Maven 项目隶属的实际项目。首先,Maven 项目和实际项目不一定是一对一的关系。比如 Spring FrameWork 这一实际项目,其对应的 Maven 项目会有很多,如 spring-core、spring-context 等。这是由于 Maven 中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId 不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果 groupId 只定义到组织级别,而后面我们会看到,artifactId 只能定义 Maven 项目(模块),那么实际项目这个层次将难以定义。最后,groupId 的表示方式与 Java 包名的表达方式类似,通常与域名反向一一对应。上例中,groupId 为 junit ,是不是感觉很特殊,这样也是可以的,因为全世界就这么个 junit ,它也没有很多分支。

artifactId :该元素定义当前实际项目中的一个 Maven 项目(模块)。推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如上例中的 junit ,junit 就是实际的项目名称,方便而且直观。在默认情况下,Maven 生成的构件,会以 artifactId 作为文件头。例如 junit-3.8.1.jar ,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。

version :该元素定义了使用构件的版本。如上例中 junit 的版本是 4.13-BETA ,你也可以改为 4.1.2 表示使用 4.1.2 版本的 junit 。

packaging :定义 Maven 项目打包的方式,使用构件的什么包。打包方式通常与所生成构件的文件扩展名对应。如上例中没有 packaging ,则默认为 jar 包,最终的文件名为junit-4.13-BETA.jar 。当然,也可以打包成 war 等。

classifier :该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应。如上例中的主构件为 junit-4.13-BETA.jar ,该项目可能还会通过一些插件生成如 junit-4.13-BETA-javadoc.jar、junit-4.13-BETA-sources.jar,这样附属构件也就拥有了自己唯一的坐标。 上述 5 个元素中:

groupId、artifactId、version 是必须定义的。 packaging 是可选的(默认为 jar )。 而 classfier 是不能直接定义的,需要结合插件使用。

Maven 常用命令

mvn compile :编译源代码。

mvn deploy :发布项目。

mvn test-compile :编译测试源代码。

mvn test :运行应用程序中的单元测试。

mvn site :生成项目相关信息的网站。

mvn clean :清除项目目录中的生成结果。 mvn package :根据项目生成的 jar/war 等。

mvn install :在本地 Repository 中安装 jar 。

mvn eclipse:eclipse :生成 Eclipse 项目文件。

mvn jetty:run 启动 Jetty 服务。

mvn tomcat:run :启动 Tomcat 服务。

mvn clean package -Dmaven.test.skip=true :清除以前的包后重新打包,跳过测试类。

用到最多的命令

mvn clean :清除 Project 中以前的编译的东西,重新再来。

mvn compile :开始编译 Maven 的 Project 。

mvn clean package :清除以前的包后重新打包。

你们项目为什么选用 Maven 进行构建?

首先,Maven 是一个优秀的项目构建工具。使用maven,可以很方便的对项目进行分模块构建,这样在开发和测试打包部署时,效率会提高很多。

其次,Maven 可以进行依赖的管理。使用 Maven ,可以将不同系统的依赖进行统一管理,并且可以进行依赖之间的传递和继承。

Maven 是什么?

Maven 主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。

Maven 的主要功能主要分为 4 点:

依赖管理系统

多模块构建

一致的项目结构

一致的构建模型和插件机制

posted on   剽悍一小兔  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-10-31 简单明了,告诉你什么是内卷
2021-10-31 JavaScript百炼成仙 后续章节
2021-10-31 IDEA启动之后桌面上会多出3个.log结尾的文件

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示