使用方法
将项目安装到本地仓库
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 自动处理模块间的构建顺序和依赖传递。
- 减少冲突:模块化开发将依赖隔离到具体模块,降低依赖冲突的风险。