文章目录
基础
概念
🍇定义
Maven,是java项目管理工具,用于管理java依赖,用于编译、打包以及发布java项目。
包含:
项目对象模型(POM,Project Object Model)、项目生命周期(Project Lifecycle)、依赖管理系统(Dependency Management System)和各种插件。
插件主要用来实现生命周期各个阶段(phase)的目标(goal)。
掌握内容:
使用Maven构建项目、排查并调解项目依赖冲突。
🍇 作用
编译代码
项目打包
实现项目模块化
在线管理依赖,项目依赖很方便获取
提供了一些丰富的插件,方便项目持续集成

常见命令
| 命令 | 说明 |
|---|---|
| mvn install | 打包好的jar包会安装到本地的maven仓库 |
| mvn archetype:generate | 创建工程架构的模板 可以用来创建maven项目 |
| mvn test | 运行测试 |
| mvn package | 打包 |
| mvn complie | 用于编译源代码 |
| mvn deploy | 将构建生成的 JAR 或 WAR 文件上传到 远程仓库 |
IDEA配置Maven
概述
IDEA 默认的插件Maven 版本是3.6.1 自己使用的IDEA 版本是19.3.3


maven项目打包以及发布

学习参考:https://blog.youkuaiyun.com/qq_40547893/article/details/110091275
clean命令
清除由项目编译创建的target
validate命令
验证项目是否正确并且所有必要的信息均可用
compile命令
编译项目的源代码
test命令
使用合适的单元测试框架来测试编译的源代码。 这些测试不应要求将代码打包或部署
verify命令
对集成测试的结果进行任何检查,以确保符合质量标准
package命令
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,
但没有布署到远程maven私服仓库
deploy命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
**package,install,deploy三者关联**
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
site命令
用于为Maven项目生成站点(用以生成HTML页面的模块等文档)
pom.xml
scope标签
<scope>xxx<scope>
xxx的内容有5种类型;
compile(编译范围):
默认配置,表示被依赖项目需要参与当前项目的编译;
test(测试范围):
表示依赖项目仅仅参与测试相关的工作;
runntime(运行时范围):
表示被依赖项目无需参与项目的编译,后期的测试和运行周期需要参与;
provided(已提供范围):
表示打包的时候可以不用包进去,别的实施(Web Container)会提供;
system(系统范围):
与provided类似,但必须显式提供一个基于本地系统中JAR文件的路径,目的是为了允许基于本地对象编译;
Gradle
定义:
Gradle 提供了强大的依赖管理、灵活的构建配置和高效的构建过程,使项目构建变得更加简单、可维护和可扩展。
实战
普通java项目变成maven项目
参考博客:https://www.cnblogs.com/liuyitan/p/13214886.html

pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.isoftstone.core</groupId>
<artifactId>isc</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>xxxx</name>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
<build>
<finalName>isc</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
私有包引入项目
问题描述:
已知服务器运行项目的jar包,构建其spring项目;
将服务jar包解压可以看到具体的依赖库jar包;
针对公开包进行maven官网下载,而针对私有包需要进行导入处理。
IDEA编译器处理:
mvn install:install-file -Dfile="包路径/包名.jar" -DgroupId=包名 -DartifactId=模块名 -Dversion="版本号" -Dpackaging=jar -DgeneratePom=true -DlocalRepositoryPath="依赖库路径"
版本管理
🍑 pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是XML文件声明,定义了文档类型和编码 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 指定了Maven POM的命名空间和schema -->
<modelVersion>4.0.0</modelVersion>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<!-- 项目唯一标识 -->
<name>xxx</name> <!-- 项目显示名称 -->
<description>xxx</description>
<packaging>jar</packaging>
<version>0.0.1</version> <!-- 项目版本号 -->
</project>
🍑 版本管理策略
Release版本:
<version> x.x.x </version>
仓库地址是:maven-release
一旦发布,同一个版本号不允许再次发布。这是Maven的规范,也是Nexus默认的配置。
Snapshot版本:
<version> x.x.x-SNAPSHOT </version>
仓库地址是:maven-snapshots
允许重复发布,每次发布可以覆盖同一个版本。
🍑 案例
报错1:
同一个版本号的release版本发布,即deploy;
报错:400 repository does not allow updating assets:maven-releases

问题解决
配置cat服务
问题描述:
com.dianping.cat:cat-client:pom:unknown failed to transfer from http://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of maven-default-http-blocker has elapsed or updates are forced. Original error: Could not transfer artifact com.dianping.cat:cat-client:pom:unknown from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [ali (http://maven.aliyun.com/nexus/content/groups/public/, default, releases)]
无法访问 Maven 3.8.1 http 仓库。
解决:
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.1.0</version>
</dependency>
// 给依赖项增加version即可,最初没有新增version
maven实现deploy
🍇 在maven所在文件夹,conf--setting.xml--servers标签中
增加如下内容:
<server>
<id>与maven配置文件pom中responsitry的id一致</id>
<username>用户名</username>
<password>密码</password>
</server>
如果出现修改后不起作用的情况;
需要修改c:/用户/xxx/.m2/setting.xml 文件中的servers标签,添加上述内容。
🍇 pom代码需要添加内容:
<distributionManagement>
<snapshotRepository>
<id>与setting.xml中的server-id保持一致</id>
<name>远程仓库名</name>
<url>远程仓库地址</url>
</snapshotRepository>
</distributionManagement>
🍑 注意:
远程仓库url与web可以访问的仓库地址不一样;
http://<your-nexus-or-artifactory-server>/#browse/browse:maven-public
一个 Web 界面的浏览地址,是你在浏览器中访问 Nexus 或 Artifactory 时看到的路径,用于在 Web 页面中浏览仓库内容。
它 不是 Maven 用来上传(部署)构件的真正仓库地址。
Maven 需要的是一个 REST API 风格的仓库地址,用于直接上传文件,而不是通过浏览器访问的地址。
故此,通过web查看和maven直接上传的url是不相同的;
8389

被折叠的 条评论
为什么被折叠?



