maven模块化开发

使用方法

将项目安装到本地仓库

mvn install 的作用

运行 mvn install 时,Maven 会执行项目的整个构建生命周期(包括 compile、test、package 等阶段),最终将构建的 artifact 安装到本地仓库(默认路径为 ~/.m2/repository)。具体来说:

  • 打包 src/main 目录:src/main 下的代码(通常是 Java 源代码、资源文件等)会被编译并打包成 artifact,例如 JAR、WAR 文件,具体取决于 pom.xml 中的 (如 jar、war)。
  • 生成元数据:除了主 artifact(例如 my-project-1.0.0.jar),Maven 还会生成并安装其他文件到本地仓库,包括:
    • POM 文件:项目的 pom.xml 文件会被复制到本地仓库,作为 artifact 的元数据文件(例如 my-project-1.0.0.pom)。
    • 校验文件:如 .sha1 或 .md5 文件,用于验证 artifact 的完整性。

因此,mvn install 不仅打包 src/main 目录的内容,还会将 pom.xml 及其相关元数据安装到本地仓库。

将该项目的gav坐标(pom.xml文件当中最上面的)引入到另一个项目当中即可

扩展:

1.将jar包手动装入本地仓库

将 JAR 包手动装入 Maven 本地仓库,可以使用 Maven 提供的 mvn install:install-file 命令。以下是详细步骤和说明:

1. 准备工作

  • 确保 Maven 已安装:运行 mvn -version 检查 Maven 是否正确安装。
  • 获取 JAR 包:确认你有需要安装的 JAR 文件(例如 my-lib.jar)。
  • 确定 Maven 坐标:你需要知道 JAR 包的 groupId、artifactId 和 version。如果 JAR 包没有提供这些信息,可以根据项目或组织自定义。

2.** 使用 mvn install:install-file 指令**
Maven 提供 install:install-file 目标来手动安装 JAR 包到本地仓库。基本命令格式如下:

mvn install:install-file \ -Dfile=<JAR文件路径> \ -DgroupId=<组ID> \ -DartifactId=<工件ID> \ -Dversion=<版本号> \ -Dpackaging=jar

参数说明:
  • -Dfile:JAR 文件的路径(绝对路径或相对路径)。

-DgroupId :Maven 坐标的 groupId ,例如 com.example 。
+
-DartifactId :Maven 坐标的 artifactId ,例如 my-lib 。

  • -Dversion:版本号,例如 1.0.0。
  • -Dpackaging:打包类型,通常为 jar。
示例:

假设你有一个 JAR 文件 my-lib.jar 位于当前目录,计划以以下坐标安装:

groupId : com.example
+
artifactId : my-lib
+
版本 : 1.0.0

运行以下命令:

狂欢

复制

mvn install:install-file \ -Dfile=my-lib.jar \ -DgroupId=com.example \ -DartifactId=my-lib \ -Dversion=1.0.0 \ -Dpackaging=jar

3. 验证安装

  • 检查本地仓库:JAR 包会被安装到本地仓库(默认路径为 ~/.m2/repository 或 %USERPROFILE%.m2\repository)。 根据上述示例,JAR 包会位于: 文本复制~/.m2/repository/com/example/my-lib/1.0.0/my-lib-1.0.0.jar 你可以导航到该路径,确认是否存在 my-lib-1.0.0.jar 和 my-lib-1.0.0.pom 文件。
  • 在项目中使用:在项目的 pom.xml 中添加依赖,验证是否能正确引用

2.将jar包安装到远程仓库

1). 确认远程仓库配置

要上传 artifact 到远程仓库,需要在 Maven 项目的 pom.xml 文件或 settings.xml 文件中配置远程仓库信息。

在 pom.xml 中配置远程仓库

在项目的 pom.xml 文件中,添加 标签,指定远程仓库的地址。例如:
<<font style="color:rgb(228, 86, 73);">distributionManagement</font>> <<font style="color:rgb(228, 86, 73);">repository</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">name</font>>My Repository</<font style="color:rgb(228, 86, 73);">name</font>> <<font style="color:rgb(228, 86, 73);">url</font>>http://nexus.example.com/repository/maven-releases/</<font style="color:rgb(228, 86, 73);">url</font>> </<font style="color:rgb(228, 86, 73);">repository</font>> <<font style="color:rgb(228, 86, 73);">snapshotRepository</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-snapshot-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">name</font>>My Snapshot Repository</<font style="color:rgb(228, 86, 73);">name</font>> <<font style="color:rgb(228, 86, 73);">url</font>>http://nexus.example.com/repository/maven-snapshots/</<font style="color:rgb(228, 86, 73);">url</font>> </<font style="color:rgb(228, 86, 73);">snapshotRepository</font>> </<font style="color:rgb(228, 86, 73);">distributionManagement</font>>

  • :用于发布正式版本(release)。
  • :用于发布快照版本(snapshot,如 1.0.0-SNAPSHOT)。
  • :仓库的唯一标识,需与 settings.xml 中的认证信息对应。
  • :远程仓库的地址(例如 Nexus 或 Artifactory 的 URL)。
在 settings.xml 中配置认证信息

远程仓库通常需要用户名和密码,在 ~/.m2/settings.xml 中添加服务器认证信息:
<<font style="color:rgb(228, 86, 73);">settings</font>> <<font style="color:rgb(228, 86, 73);">servers</font>> <<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">username</font>>your-username</<font style="color:rgb(228, 86, 73);">username</font>> <<font style="color:rgb(228, 86, 73);">password</font>>your-password</<font style="color:rgb(228, 86, 73);">password</font>> </<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-snapshot-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">username</font>>your-username</<font style="color:rgb(228, 86, 73);">username</font>> <<font style="color:rgb(228, 86, 73);">password</font>>your-password</<font style="color:rgb(228, 86, 73);">password</font>> </<font style="color:rgb(228, 86, 73);">server</font>> </<font style="color:rgb(228, 86, 73);">servers</font>> </<font style="color:rgb(228, 86, 73);">settings</font>>

  • 必须与 pom.xml 中 的 匹配。
  • 如果密码不宜明文存储,可以使用加密密码(参考 Maven 密码加密)。

2). 确保项目版本正确

  • 正式版本:确保 pom.xml 中的 不包含 SNAPSHOT,例如 1.0.0。
  • 快照版本:如果版本包含 SNAPSHOT(如 1.0.0-SNAPSHOT),会上传到 。

3). 执行上传命令

使用 Maven 的 deploy 命令将 artifact 上传到远程仓库:

狂欢

复制

mvn deploy

  • 这会将 artifact 上传到 pom.xml 中配置的远程仓库。
  • 如果是快照版本,会上传到 ;如果是正式版本,会上传到 。
常见选项
  • 跳过测试:如果想在部署时跳过测试,可以使用: 狂欢复制mvn deploy -DskipTests
  • 指定 profile:如果使用特定 profile: 狂欢收起自动更改运行复制mvn deploy -Pmy-profile

4). 验证上传结果

  • 检查远程仓库:登录远程仓库的管理界面(如 Nexus 或 Artifactory 的 Web 界面),确认 artifact 是否出现在指定路径(根据 groupId、artifactId、version 组织)。
  • 命令行验证:如果远程仓库支持 HTTP 访问,可以尝试通过 curl 或浏览器访问 artifact 的 URL,例如: 文本复制http://nexus.example.com/repository/maven-releases/com/example/my-project/1.0.0/my-project-1.0.0.jar

3.maven项目继承

在子模块当中

通过即可实现引入父工程的pom.xml,避免重复的引入重复的坐标依赖。

4.maven项目聚合

在父模块当中

父工程打包,整个所有聚合的模块也都会进行打包,父工程进行什么操作,子模块也进行什么操作

好处

1. 提高代码复用性和模块化

  • 模块拆分:将项目按功能或业务逻辑拆分为多个子模块(如 core、web、service),每个模块负责独立的功能,代码结构更清晰。
  • 依赖共享:子模块可以共享父模块定义的依赖和配置,减少重复代码。例如,父 pom.xml 中统一管理依赖版本,子模块直接引用。
  • 复用性:模块可以作为独立的 artifact(如 JAR)被其他项目或模块复用,降低开发成本。

2. 简化依赖管理

  • 统一版本控制:在父模块的 pom.xml 中使用 定义依赖版本,子模块无需重复指定版本,避免版本冲突。
  • 内部依赖:子模块之间可以相互依赖(通过 引用),Maven 自动处理模块间的构建顺序和依赖传递。
  • 减少冲突:模块化开发将依赖隔离到具体模块,降低依赖冲突的风险。

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

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

相关文章

(11)Service Mesh架构下Java应用实现零信任安全模型

Service Mesh架构下Java应用实现零信任安全模型 📌 TL;DR: 本文详细介绍如何在Service Mesh架构中实现零信任安全模型,包括身份认证、授权控制、加密通信和持续监控四大核心技术,以及与Istio、Envoy等组件的集成方案。 目录 零信任安全模型概述关键技术实现最佳实践Service…

修改 K8S Service 资源类型 NodePort 的端口范围

在 Kubernetes 中&#xff0c;Service 类型为 NodePort 时&#xff0c;默认分配的端口范围为 30000~32767。如果你希望使用自定义端口&#xff08;如 8080、8888 等&#xff09;&#xff0c;就需要修改 kube-apiserver 的默认配置。 本文将详细介绍如何修改 Kubernetes 中 Nod…

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其高性能、可靠性和易用性而闻名&#xff0c;适用于各种规模的应用&#xff0c;从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…

CentOS安装最新Elasticsearch8支持向量数据库

大家都知道Elasticsearch是支持向量的存储和查询的&#xff0c;今天我们来介绍下如何安装支持向量数据库的Elasticsearch &#xff0c; 操作环境是CentOS。 成功安装截图 大家进入系统shell&#xff0c;跟我执行下面命令进行安装。 更新系统 [rootlocalhost ~]# sudo yum u…

SDL2常用函数SDL事件处理:SDL_Event|SDL_PollEvent

SDL_Event SDL_Event是个联合体&#xff0c;是SDL中所有事件处理的核心。 SDL_Event是SDL中使用的所有事件结构的并集。 只要知道了那个事件类型对应SDL_Event结构的那个成员&#xff0c;使用它是一个简单的事情。 下表罗列了所有SDL_Event的所有成员和对应类型。 Uint32typ…

webpack吐环境分析

需要解决的问题 扣取下来的webpack文件过大 解决思路 用ast将需要的代码扣下来 结果展示 实现步骤 第一步&#xff1a;我们得知道需要哪些模块 在入口处&#xff0c;增加模块记录 第二步&#xff0c;分析ast代码 通过分析发现,key 有三种值 分别为NumbericLiteral、StringLi…

微软语音合成助手资源下载

微软语音合成助手资源下载 【下载地址】微软语音合成助手资源下载 微软语音合成助手是一款基于先进AI技术的文本转语音工具&#xff0c;能够将文字内容快速转换为自然流畅的语音。它支持高度自定义的语音参数&#xff0c;包括语速、音调、发音和停顿等&#xff0c;满足多样化需…

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要 一、微软.NET开发平台1. 核心组件2. 特点3. 应用场景4. 开源与社区5. 版本与更新6. 学习资源 二、C# 编程语言1. 历史背景2. 语言特性&#xff08;1&#xff09;面向对象&#xff08;2&#xff09;类型安全&#xf…

图片文件未正确加载​—— Webpack 无法正确解析图片,生成了一个空的 Base64 URL

如果你打印出的图片 URL 是 data:image/png;base64, 后面没有实际的 Base64 数据&#xff0c;可能有以下几种原因&#xff1a; ​​1. 图片文件未正确加载​​ ​​可能原因​​&#xff1a;图片路径错误&#xff0c;导致 Webpack 无法正确解析图片&#xff0c;生成了一个空的…

3D打印仿造+ AI大脑赋能,造出会思考的全景相机

在自然界的生存竞赛里&#xff0c;节肢动物堪称视觉界的 "卷王"&#xff01;那些长着复眼的小机灵鬼&#xff0c;比如蜜蜂、蜻蜓&#xff0c;别看个头小&#xff0c;视觉能力却超强。 现在&#xff0c;科学家把它们的眼睛 " 偷"过来啦 —— 不是真偷&…

rabbitmq单机多实例部署

RabbitMQ 单实例部署 单实例部署是指在一台服务器上运行一个 RabbitMQ 实例。这种部署方式适用于小型应用或开发环境,配置简单,资源占用较少。单实例部署的核心是安装 RabbitMQ 并启动服务,通常需要配置 Erlang 环境,因为 RabbitMQ 是基于 Erlang 编写的。单实例部署的优势…

知识宇宙-职业篇:后端工程师

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、后端工程师的定义与职责1. 什么是后端工程师&#xff1f;2. 主要工作职责 二、…

机试 | vector/array Minimum Glutton C++

题目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴数&#xff0c;X&#xff1a;总甜度阈值&#xff0c;Y&#xff1a;总咸度阈值int…

【Django ORM】三万字了解Django ORM的基本概念和基本使用

第一章 Django ORM 概述 1.1 什么是Django ORM 1.1.1 ORM的基本概念 ORM 即对象关系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;它是一种编程技术&#xff0c;用于在面向对象编程语言&#xff08;如 Python&#xff09;和关系型数据库&#xff08;如…

在springboot项目中是否可以使用两个不同地址的redis

在Spring Boot项目中可以通过多数据源配置的方式使用两个不同地址的Redis实例。以下是具体实现方案 1.依赖配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusio…

JMeter 教程:监控性能指标 - 第三方插件安装(PerfMon)

目录 【简单介绍】 ✅ PerfMon 插件是什么&#xff1f; &#x1f6e0;️ 安装 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安装&#xff08;推荐&#xff09; &#x1f50c; 安装完成后组件介绍 &#x1f310; 服务端安装 ServerAgent&#xff08;用于被…

【后端高阶面经:数据库篇】19、分库分表查询困境:无分库分表键时的高效应对

一、分库分表下的无分片键查询困境 在分布式数据库架构中,分库分表通过分片键(如买家ID)将数据分散存储,显著提升了单表性能和系统扩展性。然而,当业务需要从非分片键维度(如卖家ID)进行查询时,传统架构暴露出以下核心问题: 1.1 跨分片扫描的性能灾难 数据分散性:以…

ARM架构

目录 哈佛结构 arm指令格式 有符号数的溢出&#xff08;8bit)​ 无符号数的进位/借位 CPSR&#xff08;当前程序状态寄存器&#xff09; ARM模式 arm异常类型 ARMv7架构异常向量表 arm异常的处理流程 arm寄存器 堆栈指针寄存器 arm模式切换流程 LDR指令、STR指令 指…

canvas(三)-动画3d

在 <canvas> 中实现 3D 动画通常需要借助 WebGL 技术,因为原生的 2D 上下文(CanvasRenderingContext2D)无法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API,可以直接在浏览器中实现高性能的 3D 图形渲染。以下是关于 <canvas> 3D 动画的概念…

右键打开 pycharm 右键 pycharm

文件夹右键打开pycharm aaa.reg notepad 右下角把文件格式改为&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…