💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
- 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- 一.常用命令
- 1.清理
- 2.编译
- 3.测试
- 4.打包
- 5.安装到远程
- 6.打包安装
- 7.打包
- 二.下载与配置
- 1.依赖包
- 2.配置
- 3.快速打开文件
- 4.jar 瘦身
- 5.环境配置
- 三.jar 包下载
- 1.方式一
- 2.方式二
- 四.依赖说明
- 1.dependencyManagement
- 2.distributionManagement
- 3.使用总结
- 五.插件使用
- 1.下载插件
- 2.查看冲突
- 3.跳转树结构
- 4.跳转到 pom
- 5.显示依赖树
- 六.maven 打包异常
- 1.问题描述
- 2.添加配置
- 3.检查配置
- 4.java_home
- 5.删除插件
一.常用命令
1.清理
#将以前编译得到的旧的 class 字节码文件删除
mvn clean
2.编译
#编译,将 Java 源程序编译成 class 字节码文件
mvn compile
3.测试
#测试,并生成测试报告
mvn test
4.打包
#打包,动态 web工程打 war包,Java工程打 jar 包
mvn pakage
5.安装到远程
#将项目生成 jar 包放在仓库中,以便别的模块调用
mvn install
6.打包安装
#打成jar包,并且抛弃测试用例打包
mvn clean install -Dmaven.test.skip=true
7.打包
#动态 web工程打 war包,Java工程打 jar 包 ,并且抛弃测试用例打包
mvn clean pakage -Dmaven.test.skip=true
二.下载与配置
1.依赖包
http://www.mvnrepository.com/
http://mvnrepository.com/
http://findjar.com
http://sourceforge.net/
2.配置
3.快速打开文件
4.jar 瘦身
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
5.环境配置
<profiles>
<profile>
<id>dev</id>
<properties>
<!--内部版本-->
<tag.common.version>1.0.0-SNAPSHOT</tag.common.version>
<tag.api.version>1.0.0-SNAPSHOT</tag.api.version>
<tag.provider.version>1.0.0-SNAPSHOT</tag.provider.version>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<!--内部版本-->
<tag.common.version>1.0.0-SNAPSHOT</tag.common.version>
<tag.api.version>1.0.0-SNAPSHOT</tag.api.version>
<tag.provider.version>1.0.0-SNAPSHOT</tag.provider.version>
</properties>
</profile>
<profile>
<id>uat</id>
<properties>
<!--内部版本-->
<tag.common.version>1.0.0</tag.common.version>
<tag.api.version>1.0.0</tag.api.version>
<tag.provider.version>1.0.0</tag.provider.version>
</properties>
</profile>
<profile>
<id>prd</id>
<properties>
<!--内部版本-->
<tag.common.version>1.0.0</tag.common.version>
<tag.api.version>1.0.0</tag.api.version>
<tag.provider.version>1.0.0</tag.provider.version>
</properties>
</profile>
</profiles>
三.jar 包下载
1.方式一
2.方式二
https://repo1.maven.org/maven2/
四.依赖说明
1.dependencyManagement
- 在该元素下声明的依赖不会实际引入到模块中,只有在 dependencies 元素下同样声明了该依赖,才会引入到模块中。该元素能够约束 dependencies 下依赖的使用
- 即 dependencies 声明的依赖若未指定版本,则使用 dependencyManagement 中指定的版本,否则将覆盖 dependencyManager 中的版本
- dependencyManager 可以传递给子模块,所以在子模块中可以引用父模块 dependencyManagement 定义好的依赖
<!--在dependencyManagement 声明的依赖不会实际引入到模块中 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>
</dependencyManagement>
如果需要使用该依赖,则应该在 dependencies 中重新声明该依赖
<!--如果需要使用,在dependencies中声明该依赖,无须指定版本-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果是在子类中,需要先引入父模块,再引用依赖
<!--引入父模块, parent标签可以理解为java中的继承关系-->
<parent>
<groupId>父类 groupId</groupId>
<artifactId>父类 artifactId</artifactId>
<version>父类 version</version>
</parent>
<!--如果需要使用,在dependencies中声明该依赖,无须指定版本-->
<dependencies>
<dependency>
<!--如果指定了版本号,则会覆盖父模块 dependencyManagement 定义的版本(不建议这
做,dependencyManagement的作用本来就是用来统一版本,防止依赖冲突)-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
使用 dependencyManagement 可以统一声明依赖版本,进行集中管理,避免依赖冲突
2.distributionManagement
distributionManagement 的作用是"分发构件至远程仓库":
mvn install 会将项目生成的构件安装到本地 Maven 仓库,mvn deploy 用来将项目生成的构件分发到远程 Maven 仓库。本地 Maven 仓库的构件只能供当前用户使用,在分发到远程 Maven 仓库之后,所有能访问该仓库的用户都能使用你的构件。
我们需要配置 POM 的 distributionManagement 来指定 Maven 分发构件的位置。给出 Maven 部署当前项目的构件到远程库时,关于远程库的配置。
<distributionManagement>
<repository>
<id>随便起</id>
<url>你自己maven环境下setting文件里面的私有库</url>
</repository>
<snapshotRepository>
<id>随便起t</id>
<url>你自己maven环境下setting文件里面的快照库</url>
</snapshotRepository>
</distributionManagement>
3.使用总结
- modules 中的 module 标签顺序,随意放置就好,不用按照子模块依赖顺序来设置,maven 会自动按照依赖顺序为你打包
- modules 中的 module 标签作用:modules 只能在模块的打包方式是 pom 的时候才能使用,比如 packaging 设置为 pom,modeule 标签中的名称是其他模块 artifactId 名称,无论该模块是否打包方式为 pom 模块的子模块,都是可以的;在对父模块进行 mvn clean install 的时候,所有在 module 标签中的模块都会自动按照模块之间的依赖顺序进行 mvn clean install
- 当我们从 maven 私服中下载子模块 jar 包的时候,该子模块 jar 包会去寻找用到的父模块 jar 包,主要目的是确定用到依赖的版本,所以我们把子模块 jar 包发布到 maven 仓库的时候,也一定要同步把父模块 jar 包发布到 maven 仓库,这样在下载子模块的时候才不会报错
- 发布打包方式为 pom 的父模块到 maven 仓库的时候,我们可以删除父模块的 module 标签吗,我认为是可以的,因为 module 标签的作用在上面 2 中已经说明了,所以它只和打包方式为 pom 的模块进行 mvn clean install 的时候有关,也就是说只和开发的时候 mvn clean install 有关,和其他的地方没啥关系
五.插件使用
1.下载插件
在插件市场搜索 Maven Helper 插件,即可使用插件。目前市面上大多数项目都使用 Maven 管理依赖,而 Maven Helper 简化了与 Maven 构建系统集成的复杂性。提供了依赖分析、冲突解决、依赖图可视化等功能,让我们能够更轻松地管理项目的依赖关系。
Maven Helper 插件有以下几个优势:
- 它可以让你快速地发现和解决 Maven 项目中的依赖冲突问题,避免因为冲突导致的运行时错误或者编译失败。
- 它可以让你清晰地查看 Maven 项目中的所有依赖关系,以及它们的来源和版本,方便你进行依赖管理和优化。
- 它可以让你一键地排除掉不需要的子依赖,减少项目中无用或重复的依赖,提高项目的质量和性能。
- 支持全局的 maven run/debug 命令在当前文件或当前模块下运行。
2.查看冲突
点击如图所示,可以看到有冲突的 jar 包
3.跳转树结构
- 跳到左边的依赖树,定位 jar 包位置
- 跳到引用位置,方便对冲突的引入删除
4.跳转到 pom
点击跳转到源码即可跳转到 pom 的引用位置。
5.显示依赖树
六.maven 打包异常
1.问题描述
No compiler is provided in this environment. Perhaps you are running on a JRE。
2.添加配置
添加配置指定 maven 打包的 java 环境,可以解决问题,但是因为开发人员每个人配的不一样,这样的配置不利于团队开发,也就是治标不治本,要找到问题的根本原因
<build>
<plugins>
<plugin>
<!-- 指定maven编译的jdk版本 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<!--你的jdk地址-->
<executable>/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home/bin/javac</executable>
</configuration>
</plugin>
</plugins>
</build>
3.检查配置
java --version #可以正常显示
mvn --version #可以正常显示
使用 mvn -version runtime 检查 maven 的运行环境
mvn -version runtime
查看 java 的环境配置
vim ~/.bash_profile
source ~/.bash_profile
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
4.java_home
执行下面的命令,如图,可以看到 2 个 home 目录,maven 使用的正是 JavaAppletPlugin.plugin 的 java_home,我们需要删除 JavaAppletPlugin.plugin 这个插件
/usr/libexec/java_home -V
5.删除插件
进入目录,需要使用 sudo 权限删除插件
cd /Library
cd Internet\ Plug-Ins
sudo rm -rf JavaAppletPlugin.plugin
检查 maven 的运行环境,和配置的 java 环境一致
mvn -version runtime
再次执行 maven 的打包命令,顺利打包.
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙