当前位置: 首页 > news >正文

最细Maven教程以及Maven私服搭建

Maven的概念

Maven 是什么?

你可以把 ​​Maven 想象成 Java 项目的“超级管理员”或“自动化助手”​​。

它的核心任务是​​项目管理​​,尤其是管理项目的​​构建过程​​、​​依赖管理​​和​​项目信息管理​​。

它的两大核心功能:

  1. ​依赖管理​

    • ​痛点​​:一个Java项目通常需要很多第三方“零件”(即jar包,比如连接数据库的驱动、处理JSON的工具包等)。手动去网上下载这些jar包,还要确保版本正确、处理它们之间的依赖关系,非常麻烦且容易出错。

    • ​Maven的解决方案​​:你只需要在一个配置文件(pom.xml)里声明需要什么“零件”(比如:“我需要一个版本为 5.1.47 的 MySQL 驱动包”),Maven 就会自动从中央仓库(可以理解为一个巨大的网上图书馆)帮你下载,并且会把它依赖的其他“零件”也一并下载好。

  2. ​标准化构建流程​

    • ​痛点​​:开发一个项目需要很多步骤:编译源代码 -> 运行测试 -> 打包成jar/war文件 -> 部署到服务器。每次手动执行这些命令很繁琐。

    • ​Maven的解决方案​​:Maven 预设了一套标准的生命周期(Lifecycle)。你只需要执行一条简单的命令(比如 mvn package),Maven 就会自动、按顺序地执行编译、测试、打包等一系列操作,极大地提升了效率。

Maven的应用场景

maven 的应用场景,开发人员只要按着 maven 标准的目录结构进行开发即可,然后提
交代码。在测试服务器上拉取 Java 源码,然后可以使用 maven 的自动化项目构建完成项

目的清理、编译、测试、打包和安装部署等。

初识Maven

Maven安装

安装Maven前需要进行安装jdk1.8或以上版本

Maven官网 

http://maven.apache.org/download.html 
下载后解压到相应的目录即可(无中文路径)

Maven安装目录分析

Maven的环境变量

验证是安装成功 WIN+R 输入cmd   输入mvn -version

Maven的第一个项目

按照约定创建 Maven项目路径

在Hello根目录建立pom.xml

src/main/java/cn/tx/maven 目录下新建文件 Hello.java

创建HelloTest.java文件

/src/test/java/cn/tx/maven 目录下新建测试文件 HelloTest.java
进行Maven操作
1. 打开 cmd 命令行,进入 Hello 项目根目录执行 mvn compile 命令,查看根目 录变化
2. cmd 中继续录入 mvn clean 命令,然后再次查看根目录变化
3. cmd 中录入 mvn clean compile 命令, 查看根目录变化
4. cmd 中录入 mvn clean test 命令,查看根目录变化
5. cmd 中录入 mvn clean package 命令,查看根目录变化
6. cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里

Maven命令详解

命令阶段

作用

生命周期位置

clean

删除构建产物(删除target)

独立生命周期

compile

编译主代码(生成target)

Default 生命周期

test

运行单元测试(测试test目录中的案例代码)

Default 生命周期

package

打包可部署文件(打包 生成对应格式的包 在target目录)

Default 生命周期

install

安装到本地仓库

Default 生命周期

进阶练习:
接下来以同样的方式 在创建第二个Maven 导入第一个项目的包进行联系

Maven进阶

pom.xml文件

就像 Make MakeFileAnt build.xml 一样,Maven 项目的核心是
pom.xmlPOM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,
用于描述项目如何构建,声明项目依赖,等等。Gredele

坐标

概念

Maven 中 坐 标 是 构 件 的 唯 一 标 识 , Maven 坐 标 的 元 素 包 括 groupId
artifactIdversionpackagingclassifier。上述 5 个元素中,groupId
artifactIdversion 是必须定义的,packaging 是可选的 ( 默认为 jar )
groupId:组织标识,一般为:公司网址的反写+项目名
artifactId:项目名称,一般为:项目名-模块名
version:版本号 形式为 0.0.1-SNAPSHOT
第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小
版本号
SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,
RELEASE -- 稳定版本,GA -- 正式发布
packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...
clissifier:用来帮助定义构件输出的一些附属构件。

依赖

当编写 Java 代码时,我们总是需要一些库,例如,做单元测试我们需要 JUnit 库。
对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需
要不同版本的库。 保持项目最新的库 JAR 文件的正确版本不是一个容易的任务。
每个外部 JAR 可能还依赖于其他外部 JAR 文件等。以递归方式下载所有这些外部依赖
JAR 文件并确保下载正确的版本是一项巨大的任务。
当项目越来越大,我们将需要越来越多的外部依赖。
Maven 将下载它们并将它们放在您的本地 Maven 存储库中。
我们可以在 POM 文件中的 dependencies 元素内指定依赖关系。
我们在不确定所需引用的第三方依赖包的坐标时,通过 maven 的中央仓库进行查找,
: https://mvnrepository.com/;
Maven项目在开发工程中有三套classpath
主代码:main下面的都是主代码在编译的时候的依赖
测试代码:test下是测试代码编译的时候的依赖
运行时:main代码在运行的时候对包的依赖
依赖范围的使用,通过在引用第三方依赖时的标签进行设置,
6scope,包括:complite,provided,runtime,test,systemimport
例如上图的junit,只在测试中使用,则选择test即可,默认为compi
Compile:编译依赖范围。默认使用此依赖范围,其下的maven依赖,对于编译,
测试,运行classpath都有效。
Test:测试依赖范围。只对测试classpath有效,编译主代码或运行项目时无

Provided:已提供依赖范围。其对于编译与测试classpath有效,运行时无效。e

如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范

围,在运行时servlet-apiweb容器提供,无须依赖。并且在打war包时,
此范围的依赖不会打在WEB-INF/lib下。
Runtime:运行时依赖范围。与provided相对,运行时classpath有效。典
型例子如jdbc(编写是接口规范运行是提供具体实现类需要jar包)

依赖传递

应用场景:
        如果你现在是A项目 A项目依赖B项目
        但B项目依赖C项目  你的A项目在依赖B项目是也会导入C项目

依赖阻断

        就像上面说的A项目会自动导入C项目 但是你A项目现在不想要C项目了
        可以在B项目中的pom文件中找到C项目这个依赖 写一个标签
<optional>   这样你的A项目在导入B项目的时候 不会在导入C项目 

依赖阻断

如果我们需要在依赖中明确的排除掉某一依赖,则可以使用exclusion属性,排除掉
引用的依赖,如图:

继承

继承就是避免重复,maven的继承也是这样,它还有一个好处就是让项目更加安全。
比如我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的公共
模块,比如说每个模块都需要javaseo-utils,在编译的时候,
maven-compiler-plugin插件也要被引入,maven仓库地址以及发布目录都是相同的
配置。我们可以使用Maven的继承功能,把公共的配置信息写到父模块中,子模块只要继
承了该父模块,也会继承父模块的配置信息。
可以继承的pom元素

Maven私服架构

正式开发,不同的项目组开发不同的工程。maven-dao工程开发完毕,发布到私服
maven-service从私服下载dao
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是
公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务
器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下
载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有jar包会从互联网中央仓库自动下载。

Nexus介绍

NexusMaven仓库管理器,通过nexus可以搭建maven仓库,同时nexus
提供强大的仓库管理功能,构件搜索功能等。

Maven私服实战

首先安装nexus

到官网下载nexus

1 解压自己下载的nexus文件  存放到一个不含中文目录

查看conf文件下的nexus.properties配置文件,可以修改对应的配置

2 nexus的安装命令:使用管理员运行cmd命令窗口,切换目录
nexus\nexus-2.12.0-01\bin目录下,执行nexus.batinstall进行安装。执行nexus.batstart
启动服务执行nexus.batstop停止服务。

如果显示没有这个命令可以试试加上 ./

比如 ./nexus.bat install

3 nexus的卸载命令:使用管理员运行cmd命令窗口,切换目录
nexus\nexus-2.12.0-01\bin目录下,执行nexus.batuninstall进行卸载
4访问图形化界面:打开浏览器,输入http://localhost:端口号/nexus访问
5点击login,进行登录。用户名:admin密码:
我安装nexus时候遇到的问题

1 nexus无法启动 

原因: 

我的环境变量配置的jdk过高  需要jdk8     修改环境变量中jdk位置

2 修改成jdk8后  网页无法进入  

原因 :

 电脑上jdk过多 nexus不知道使用哪个 指定jdk8

根据我的目录找到自己对应nexus中的文件 wrapper.conf目录

可能实际情况不同  可以查看日志文件精准找到自己的问题

nexus仓库类型

1hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releasessnapshot
两部分,Releases公司内部发布版本仓库、Snapshots公司内部测试版本仓库
2proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私
服,私服自动去中央仓库下载jar包或者插件。
3group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven
接仓库组。Group仓库组也是可以自己进行定制的。

将项目发布到私服

需要在当前电脑上配置maven环境 并修改Setting文件 配置连接私服的用户和密码

此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。
servers节点下进行配置
配置项目pom.xml,配置私服仓库的地址,本公司的自己的jar包会上传到私服的
宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到
私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库。
注意        这里的id标签要和setting.xml上的一样
在该工程中执行deploy 命令 发布到私服上
查看结果

从私服下载jar包

在maven中的Settings.xml配置私服的镜像文件
先把自己的某个项目发布到私服中,然后删除掉本地仓库中的jar包,再使用其他项
目去依赖该jar包,查看是否从私服中下载。
在其他项目中引入该坐标依赖。
把本地仓库中 上传到私服的项目删除掉
在进行测试看看是否能够引入成功
引入依赖
在添加上pom配置文件,添加仓库配置
进行测试
测试成功
http://www.dtcms.com/a/532886.html

相关文章:

  • wordpress网站打开速度学设计网站
  • UVa 1298 Triathlon
  • cuda编程笔记(33)--Thrust库的使用
  • Gorm(十一)事务
  • Ubuntu24.04安装好Mysql8后,检查mysql占用的内存和磁盘
  • 阿里云申请域名后网站海外网络加速器
  • Orleans ILifecycleParticipant 生命周期管理详细分析
  • 企业门户网站建设方案后台管理wordpress多级tree分类目录
  • Spring XML AOP配置实战指南
  • 什么人需要网站建设柳州网站开发公司
  • 做纯净系统的网站产品做国外网站有哪些
  • 商贸公司网站建设兴城泳装电子商务网站建设
  • 张祥前统一场论中的洛伦兹变换:多层次的应用与全新内涵
  • 网安面试题收集(4)
  • 高端上海网站设计公司价格wordpress 打赏
  • Yolo_lableimg_env
  • 【09】C语言中的格式输入函数scanf()详解
  • 鼠键共享工具
  • 个人网站备案 拍照装修网店
  • 投资,如何获得估值回归的收益?
  • 专业上海网站建设公司排名住房和城乡建设部网站杂志
  • 边界扫描测试原理 4 -- 保持状态
  • 国外服务器网站打开慢重庆公司起名
  • 个人怎样做旅游网站清新太和做网站
  • 电商系统设计:运费
  • Ceph分布式存储
  • 网站建设销售职责网站开发与运维收费明细
  • 破解空间网站十堰网站建设怎么做
  • 网站价值评估 php东莞住房和建设局网站
  • 11-14强制类型转换