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

maven进阶了解

目录

    • 依赖
      • 什么是依赖管理?
      • 依赖方式
    • 项目构建
      • 什么是项目构建?
      • 有两种项目构建方式:
    • maven
      • 什么是maven?
      • maven目录分析
      • maven仓库
      • 本地加载配置
      • pom.xml文件
      • maven坐标
      • 生命周期
    • maven继承和聚合
      • 继承
      • 可继承的pom元素
      • 聚合
      • 示例
    • 私服架构
      • 什么叫私服?
      • Nexus
      • Nexus仓库类型
      • Nexus常用命令
      • maven私服实战
        • nexus安装
        • 将项目发布到私服
        • 从私服下jar包
        • 第三方jar包发布到私服

依赖

什么是依赖管理?

对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。

依赖方式

依赖有两种:

  • 依赖传递:C依赖B,B依赖A
    • 如果C不想引入依赖A,可以进行依赖阻断<optional>true</optional>
  • 可选依赖:明确排除掉某一依赖,看使用exclusion属性,排除掉引用的依赖
    <exclusions><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId>
    </exclusions>
    

项目构建

什么是项目构建?

项目构建是一个从编写源代码到编译测试运行打包部署的过程。

有两种项目构建方式:

  • 传统项目:打开idea编写源代码和配置文件,对源代码进行编译,可以使用junit进行单元测试,把项目打成war包,部署到tomcat服务器中运行。
  • maven项目:将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。
  • 清理 -> 编译 -> 测试 -> 报告 -> 打包 -> 部署
依赖范围(scope)对主代码classpath有效对测试代码classpath有效被打包,对运行代码classpath有效例子
compilelog4j
test--junit
provided-servlet-api
runtime--JDBC

maven

什么是maven?

maven是跨平台项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

maven目录分析

  • bin:含有mvn运行的脚本
  • boot:含义plexus-classworlds类加载器框架
  • conf:含义seeting.xml配置文件
  • lib:含义maven运行时所需要的java类库
  • 其它……

maven仓库

maven仓库: 用来统一存储所有maven共享构建的位置。
maven仓库布局: 根据maven坐标定义每个构建在仓库中唯一存储路径。
仓库分类:

  • 本地仓库(local):每个用户只有一个本地仓库
  • 远程仓库(remote):中央仓库(central,maven默认的仓库)、私服(特殊的远程仓库,是架设在局域网内的仓库)

本地加载配置

如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行
全局设置如下:

file -> setting -> Runner -> 在VM Options中输入:-DarchetypeCatalog=local
本地加载配置

pom.xml文件

pom定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
maven项目的核心是pom.xml。

maven坐标

在maven中坐标是构建的唯一标识。
坐标的意义: Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。拥有了统一规范,就可以把查找工作交给机器。

  • groupId:组织表示,一般为:公式网站的反写+项目名
  • artifactId:项目名称,一般为:项目名-模块名
  • version:版本号,形式为:0.0.1-SNAPSHOT
0.0.1-SNAPSHOT
│ │ │  └─SNAPSHOT-快照版本、ALPHA-内测版本、BETA-公测版本、RELEASE-稳定版本、GA-正式发布
│ │ └─小版本号
│ └─分支版本号
└─大版本号
  • packaging:打包方式,常用方式为:pom、jar、war
  • clissifier:用来帮助定义构建输出的一些附属构建
  • scope:作用域,设置依赖范围,
依赖范围有效范围
compile(默认)编译依赖范围编译、测试、运行classpath都有效
provided已提供依赖范围编译、测试有效
runtime运行时依赖访问运行有效(典例JDBC)
test测试依赖范围只对测试有效(典例junit)

生命周期

Maven 的生命周期是对所有的构建过程进行抽象和统一。

  • clean:目的是清理项目
  • default:目的是构建项目
    • 编译compile -> 测试test -> 打包package -> 安装install
  • site:目的是建立项目站点

maven继承和聚合

继承

避免重复,可以让项目更安全。
在项目开发过程中,可以多个模块独立开发,但多个模块可以依赖相同的公共模块。
把公共的配置信息写道父模块中,子模块只要继承父模块,也会继承父模块的配置信息。

可继承的pom元素

记录常用的元素:

  • groupId:项目组ID,项目坐标的核心元素
  • version:项目版本,项目坐标的核心元素
  • properties:自定义的maven属性
  • dependencies:项目的依赖配置
  • dependencyManagement:醒目的依赖管理配置

聚合

开发中,将项目划分几个模块:

  • 公共模块common
  • 系统模块system
  • 日志模块log
  • 统计模块reports
  • 监控模块monitor等

示例

模块名称作用项目打包方式
父工程hami_parent维护四个模块关系,维护依赖管理,不做实现创建maven Java项目打pom包
公共模块hami_core做业务层和持久层,操作数据库的操作创建maven Java项目继承父工程打包方式
前台模块hami_portal做控制层和表现层,既有页面又做逻辑处理创建maven JavaWeb项目打war包
后台模块hami_console做控制层和表现层,既有页面又做逻辑处理创建maven JavaWeb项目打war包
云服务器模块hami_file存储图片等文件创建maven JavaWeb项目打war包

私服架构

正式开发,不同的项目组开发不同的工程。maven-dao 工程开发完毕,发布到私服maven-service 从私服下载 dao。

什么叫私服?

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

Nexus

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

Nexus仓库类型

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

Nexus常用命令

  • 安装:nexus.bat install
  • 启动服务: nexus.bat start
  • 停止服务: nexus.bat stop
  • 卸载: nexus.bat uninstall

maven私服实战

nexus安装
  1. 解压:解压资料中的nexus-2.12.0-01-bundle.zip 文件,存放到一个不含中文的目录下。
    查看conf文件下的nexus.properties 配置文件,可以修改对应的配置:配置
  2. 安装启动
    • 使用管理员运行 cmd 命令窗口
    • 切换目录nexus\nexus-2.12.0-01\bin (自己的安装目录下)目录下
    • 执行 nexus.bat install 进行安装(若已安装,该命令忽略)
    • 然后,执行 nexus.bat start 启动服务。
  3. 访问图形化界面:打开浏览器,输入http://localhost:端口号/nexus访问
  4. 登录:点击log in,进行登录。用户名:admin 密码:admin123
将项目发布到私服
  1. 在客户端即部署要部署的工程电脑上配置maven环境,修改maven下的setting.xml文件,配置连接私服的用户和密码
    servers节点间进行配置:
    <!-- 定义稳定版本的id名称,用户名密码 -->
    <server><id>releases</id><username>admin</username><password>admin123</password>
    </server>
    <!-- 定义开发版本的id名称,用户名密码 -->
    <server><id>snapshots</id><username>admin</username><password>admin123</password></server>
    
  2. 配置项目pom.xml,配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库
    • 如果版本为release则上传到私服的release仓库
    • 如果版本为snapshot则上传到私服的snapshot仓库。
    <distributionManagement><repository><id>releases</id><url>http://localhost:8079/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>snapshots</id><url>http://localhost:8079/nexus/content/repositories/snapshots/</url></snapshotRepository>
    </distributionManagement>
    
    注意:这里的 id 标签的值要和 settings.xml配置文件中的id值保持一致。
  3. 在该工程中执行deploy命令,发布项目到私服上。
    deploy
    success
  4. 查看私服结果
    查看结果

上述过程是SNAPSHOT快照版本发布到私服上,你可以尝试发布RELEASES稳定版本的jar包到私服,过程是一样的,将不再写过程。

从私服下jar包

有三种方式:setting.xml配置私服镜像、项目pom.xml配置仓库、setting.xml配置全局
三种方法任选其一。
方法一:setting.xml配置私服镜像

  1. 在setting.xml配置文件中,配置私服的镜像文件
    <mirror><!-- id名称 --><id>nexusmaven</id><!-- 表示拦截所有的请求,都重定向到私服,从私服下载jar包,私服没有再去中央仓库下载 --><mirrorOf>*</mirrorOf>  <name>nexus maven</name><!-- 私服的组地址 -->
    <url>http://localhost:8079/nexus/content/groups/public/</url>      
    </mirror>
    
  2. 先把自己的某个项目发布到私服中,然后删除掉本地仓库中的jar包(可以从deploy日志中查看jar包的路径),再使用其他项目去依赖该jar包,查看是否从私服中下载。
    在其它项目中引入改坐标依赖。
    <dependencies><dependency><groupId>com.qcby</groupId><artifactId>mavenJava</artifactId><version>1.0-SNAPSHOT</version></dependency>
    </dependencies>
    
    引入jar包

方法二:项目pom.xml配置仓库
可以配置仓库的方式,可以修改项目的pom配置文件,添加仓库的配置

<repositories><repository><id>nexus</id><name>nexusmaven</name><url>http://localhost:8079/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>
<pluginRepositories><pluginRepository><id>public</id><url>http://localhost:8079/nexus/content/groups/public/</url><name>pluginRepositories</name></pluginRepository>
</pluginRepositories>

上面的方式不是特别的理想,需要在每一个项目的pom文件中都添加相同的配置,比较麻烦。

方法三:setting.xml配置全局

  1. 可以在settings.xml配置文件中添加配置,完成统一的设置
    <!-- 下载jar包配置 --><profile> <!--profile的id --><id>dev</id><repositories><repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 --><id>nexus</id> <!--仓库地址,即nexus仓库组的地址 --><url>http://localhost:8079/nexus/content/groups/public/</url> <!--是否下载releases构件 --><releases><enabled>true</enabled></releases> <!--是否下载snapshots构件 --><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也
    需要从私服下载插件 --><pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 --><id>public</id><name>Public Repositories</name><url>http://localhost:8079/nexus/content/groups/public/</url></pluginRepository></pluginRepositories></profile>
    
  2. 激活配置:
    <activeProfiles><activeProfile>dev</activeProfile>
    </activeProfiles>
    
第三方jar包发布到私服
  1. 把jar包安装到本地仓库
    • 方法一:通过maven中央仓库下载对应的jar包,放到不含中文的目录下
    • 方法二:通过命令下载
      mvn install:install-file -DgroupId=com.mysql -DartifactId=mysql-connector-j -Dversion=8.2.0 -Dfile=D:\nexus\mysql-connector-j-8.2.0.jar -Dpackaging=jar
      
  2. 把jar包到私服
    • 先在settings.xml配置文件中配置用户名密码
      <server><id>thirdparty</id><username>admin</username><password>admin123</password>
      </server>
      
    • 上次到私服
      mvn deploy:deploy-file -DgroupId=com.mysql -DartifactId=mysql-connector-j -Dversion=8.2.0 -Dpackaging=jar -Dfile=D:\nexus\mysql-connector-j-8.2.0.jar -Durl=http://localhost:8079/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
      
http://www.dtcms.com/a/553756.html

相关文章:

  • Android 嵌入h5顶部状态栏空白
  • 网页制作可以用手机吗江门网站排名优化
  • 营销型网站核心要素有哪些网站建设费税率是多少钱
  • IDEA的安装与设置
  • Fuzzing 工具来一波
  • 10.31
  • 网站后台更新 前台不显示金蝶财务软件
  • Spring Boot项目的核心依赖
  • ollama本地化部署deepseek/大模型及其api流式调用
  • 向华为学习——53页华为制造行业数字化转型工业互联网智能制造解决方案【附全文阅读】
  • 基于电鱼 ARM 工控机的煤矿主控系统高可靠运行方案——让井下控制系统告别“死机与重启”
  • 顶尖网站建设国内大宗商品交易平台有哪些
  • 用langchain搭建简单agent
  • 在 Windows 11 中安装 VirtualBox 7.2.4
  • 【开题答辩全过程】以 基于Java的社交健身系统的设计与实现为例,包含答辩的问题和答案
  • Ubuntu20.04升级autoconf
  • 网站名注册最佳商城ui网站设计
  • R包kuenm和ENMeval--你用对了吗?
  • 接口自动化测试项目框架详解
  • 临安网站建设海口网红
  • 10.string(上)
  • 集团公司手机站网站报送举报网站建设情况
  • 【Spring Boot】Spring AOP动态代理,以及静态
  • 使用Requests和正则表达式实现网络小说爬取技术解析
  • spine动画监听动作播放完成重复执行
  • ui设计网站开发乡村建设的网站
  • 最新版 dify 如何离线安装插件
  • html网站的直播怎么做绵阳个人网站建设
  • 苯乙烯自由基聚合与丙交酯开环聚合的MATLAB模拟
  • 从一到无穷大 #53 Beyond TSDB Query performance: Homomorphic Compression