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

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 自动处理模块间的构建顺序和依赖传递。
  • 减少冲突:模块化开发将依赖隔离到具体模块,降低依赖冲突的风险。

相关文章:

maven模块化开发

使用方法 将项目安装到本地仓库 mvn install 的作用 运行 mvn install 时&#xff0c;Maven 会执行项目的整个构建生命周期&#xff08;包括 compile、test、package 等阶段&#xff09;&#xff0c;最终将构建的 artifact 安装到本地仓库&#xff08;默认路径为 ~/.m2/repos…...

为什么要使用stream流

总的来说就是 它支持链式调用&#xff0c;方便 不会修改原始数据源&#xff0c;而是生成一个新的流或结果 中间操作不会立即执行&#xff0c;只有在终端操作触发时才会真正执行 注意事项 无状态操作&#xff1a;Stream 操作应该是无状态的&#xff0c;不要依赖外部变量的状…...

语义分割的image

假设图像的尺寸为 3x3&#xff0c;并且是 RGB 图像&#xff08;有 3 个通道&#xff09;。每个通道的像素值范围为 [0, 1]&#xff0c;我们将构造一个 batch_size 2 的图像批次。 Image: tensor([[[[0.1347, 0.4583, 0.7102], # 第一张图像的红色通道[0.1774, 0.0328, 0.308…...

云原生安全之网络IP协议:从基础到实践指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 IP协议&#xff08;Internet Protocol&#xff09;是互联网通信的核心协议族之一&#xff0c;负责在设备间传递数据包。其核心特性包括&…...

C++——QT 文件操作类

QFile 概述 QFile是Qt框架中用于文件操作的类&#xff08;位于QtCore模块&#xff09;&#xff0c;继承自 QIODevice&#xff0c;提供文件的读写、状态查询和路径管理功能。它与 QTextStream、QDataStream 配合使用&#xff0c;可简化文本和二进制数据的处理&#xff0c;并具备…...

【排错】kylinLinx环境python读json文件报错UTF-8 BOM

kylin Linux环境python读json文件报错UTF-8 BOM 报错描述&#xff1a; windows环境下,python代码读取json文件正常&#xff0c;但是sftp到linux环境下 报错信息&#xff1a; json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column …...

[spring] spring 框架、IOC和AOP思想

目录 传统Javaweb开发的困惑 loC、DI和AOP思想提出 Spring框架的诞生 传统Javaweb开发的困惑 问题一&#xff1a;层与层之间紧密耦合在了一起&#xff0c;接口与具体实现紧密耦合在了一起 解决思路&#xff1a;程序代码中不要手动new对象&#xff0c;第三方根据要求为程序提…...

LInux—shell编程

一、Shell 编程核心特性 解释型语言 无需编译&#xff0c;直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行&#xff0c;不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令&#xff08;如 ls、grep、awk&#xff09;&#xff0c;实现系统管理自动化。 与 C/…...

尚硅谷redis7 37-39 redis持久化之AOF简介

37 redis持久化之AOF简介 AOF 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工…...

GitLab 备份所有仓库(自动克隆)

一、准备工作 1. 环境要求 已安装 Git&#xff08;版本 2.10&#xff09;本地磁盘空间充足&#xff08;根据仓库总大小预估&#xff09;已配置 SSH 密钥到 GitLab&#xff08;推荐方式&#xff09; 2. 获取 GitLab API 访问权限 登录 GitLab&#xff0c;点击右上角头像 → …...

[浏览器]缓存策略机制详解

在做页面性能优化的时候&#xff0c;有一个点容易被忽略&#xff0c;那就是资源缓存优化。 浏览器里缓存策略分为强缓存&#xff0c;协商缓存以及不缓存&#xff0c;每个缓存策略都有其适用的优化场景。 下面为大家详解何为强缓存&#xff0c;协商缓存 先说结论强缓>协商&g…...

Vue修饰符全解析

目录 一、事件修饰符 二、按键修饰符 三、系统修饰键 四、表单修饰符 五、鼠标修饰符 六、特殊修饰符 七、自定义修饰符 使用建议 一、事件修饰符 <!-- 阻止冒泡 --> <button click.stop"handleClick">点击测试</button><!-- 阻止默认行…...

OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模块中的一个工厂函数&#xff0c;用于创建一个计算图像导数的滤波器。这个滤波器可以用来计算图像…...

计算机视觉与深度学习 | Python实现CEEMDAN-ABC-VMD-DBO-CNN-LSTM时间序列预测(完整源码和数据)

以下是一个结合CEEMDAN、ABC优化VMD、DBO优化CNN-LSTM的完整时间序列预测实现方案。该方案包含完整的数据生成、算法实现和模型构建代码。 完整实现代码 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from sklearn.preprocessing…...

AWS関連職種向け:日本語面接QA集

1. 自己紹介&#xff08;じこしょうかい&#xff09; Q&#xff1a;簡単に自己紹介をお願いします。 A&#xff1a; はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計・構築・運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…...

【Macos】安装前端环境rust+node环境

Macos 安装前端环境 1、findar 新建目录 projects 2、安装brew 使用中科大镜像, 手动配置path 3、brew install git 4、 git clone githttp://10.10.9.201/software/dreame_sorting_app.git 5、安装vscode/hbuilderx/node 6、rustup切换镜像并安装https://rsproxy.cn/#getStart…...

(01)华为GaussDB((基于PostgreSQL))高斯数据库使用记录,dbeaver客户端配置高斯驱动,连接高斯数据库

高斯数据库是华为推出的一款基于PostgreSQL的企业级数据库产品&#xff0c;客户端使用通用的dbeaver dbeaver客户端配置高斯驱动 建议使用 dbeaver24.3.1及以上客户端&#xff0c;选择模式后执行sql会绑定模式名&#xff0c;如果使用dbeaver23.2版本&#xff0c;选择模式后执…...

ARM Linux远程调试

准备 虚拟机既能ping通开发板,又能ping通外网,还要能ping通Windows主机(如果你有上位机通信(tftp、vsftp、ssh)的需求) VMware 添加网络适配器2用作桥接网卡,原有的网络适配器保持为NAT模式 打开虚拟网络编辑器,配置VMnet0为桥接模式,外部连接设置为Realtek PCIe G…...

day24Node-node的Web框架Express

1. Express 基础 1.1 什么是Express node的web框架有Express 和 Koa。常用Express 。 Express 是一个基于 Node.js 的快速、极简的 Web 应用框架,用于构建 服务器端应用(如网站后端、RESTful API 等)。它是 Node.js 生态中最流行的框架之一,以轻量、灵活和易用著称。 …...

Webpack和Vite构建工具有什么区别?各自的优缺点是什么

Webpack 和 Vite 是两种主流的前端构建工具,分别代表了不同的设计理念和技术路线。以下是它们的核心区别和优缺点对比: 一、核心区别 维度WebpackVite设计理念基于打包(Bundle-Based)基于原生 ESM(Native ESM)开发模式全量打包后启动按需编译 + 浏览器直接加载 ESM构建工…...

让MySQL更快:EXPLAIN语句详尽解析

前言 在数据库性能调优中&#xff0c;SQL 查询的执行效率是影响系统整体性能的关键因素之一。MySQL 提供了强大的工具——EXPLAIN 语句&#xff0c;帮助开发者和数据库管理员深入分析查询的执行计划&#xff0c;从而发现潜在的性能瓶颈并进行针对性优化。 EXPLAIN 语句能够模…...

基于谷歌浏览器的Web Crypto API生成一对2048位的RSA密钥(公钥+私钥),并以JSON格式(JWK)打印到浏览器控制台

用Google Chrome 浏览器的Web Crypto API生成RSA密钥对&#xff1a;在浏览器环境中生成一对2048位的RSA密钥(公钥私钥)&#xff0c;然后以JSON格式(JWK)将它们打印到控制台&#xff0c;方便开发者查看和使用。 // 控制台生成密钥对 (async () > {// 调用Web Crypto API生成…...

[CSS3]rem移动适配

前言 什么是移动端适配? 让页面的元素在屏幕尺寸变化时, 同比放大或缩小 移动适配的方案 rem&#xff1a;目前多数企业在用的解决方案 vw/vh&#xff1a;未来的解决方案 rem 体验rem适配 目标: 能够使用rem单位设置网页元素的尺寸 网页效果: 屏幕宽度不同&#xff0c;网…...

向量数据库及ChromaDB的使用

什么是向量数据库&#xff1f; 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方…...

CodeBuddy实现pdf批量加密

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在信息爆炸的时代&#xff0c;PDF 格式因其跨平台性和格式稳定性&#xff0c;成为办公、学术、商业等领域传递信息的重要载体。从机密合同到个人隐私文档&#xff0c…...

编程中优秀大模型推荐:特点与应用场景深度分析

编程中优秀大模型推荐&#xff1a;特点与应用场景深度分析 编程中优秀大模型推荐&#xff1a;特点与应用场景深度分析GPT系列模型模型概述技术特点编程应用场景 DeepSeek系列模型模型概述技术特点编程应用场景 Claude系列模型模型概述技术特点编程应用场景 Llama系列模型模型概…...

orm详解--查询执行

深入解析 Django ORM 查询执行阶段 的核心机制&#xff0c;包括查询集的惰性特性、表达式树构建、SQL 编译过程及优化原理。以下是详细分析&#xff1a; 一、查询集&#xff08;QuerySet&#xff09;的惰性执行机制 1. 惰性特性的底层实现 核心类&#xff1a;django.db.mode…...

运行打印Hello World启动了多少线程?

序言 看网上说阿里二面问到了一个看似最简单且没有标准答案的一个问题&#xff0c;所有学习编程都是从打印hello World开始的&#xff0c;那运行打印启动了多少个线程&#xff1f; 启动了多少线程&#xff1f; 在运行一个简单的 “Hello World” 程序时&#xff0c;启动的线…...

C++项目中调用C#DLL的的方式

C项目中调用C&#xff03;DLL的的方式 方法一&#xff1a;使用COM技术方法二&#xff1a;使用C/CLI方法三&#xff1a;使用P/Invoke&#xff08;适用于C#导出非托管接口&#xff09; 在C中调用C#编写的DLL&#xff0c;通常需要借助COM&#xff08;Component Object Model&#…...

咳嗽止咳药笔记250526 , 磷酸苯丙哌林 , 喷托维林 , 右美沙芬

咳嗽止咳药笔记250526 止咳药的种类较多&#xff0c;根据作用机制可分为中枢性止咳药、外周性止咳药、祛痰药、抗组胺药及中成药等。以下是具体分类及效果分析&#xff1a; 一、中枢性止咳药 可待因 效果&#xff1a;直接抑制延髓咳嗽中枢&#xff0c;镇咳作用强且迅速&#x…...