💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

【高效开发工具系列】maven学习_maven

  • 推荐: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.配置

【高效开发工具系列】maven学习_java_02

3.快速打开文件

【高效开发工具系列】maven学习_java_03

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.方式一

【高效开发工具系列】maven学习_jar_04

2.方式二

https://repo1.maven.org/maven2/

【高效开发工具系列】maven学习_jar_05

四.依赖说明

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 命令在当前文件或当前模块下运行。

【高效开发工具系列】maven学习_ci_06

2.查看冲突

点击如图所示,可以看到有冲突的 jar 包

【高效开发工具系列】maven学习_jar_07

3.跳转树结构

  1. 跳到左边的依赖树,定位 jar 包位置
  2. 跳到引用位置,方便对冲突的引入删除

【高效开发工具系列】maven学习_java_08

4.跳转到 pom

点击跳转到源码即可跳转到 pom 的引用位置。

【高效开发工具系列】maven学习_ci_09

5.显示依赖树

【高效开发工具系列】maven学习_jar_10

六.maven 打包异常

1.问题描述

No compiler is provided in this environment. Perhaps you are running on a JRE。

【高效开发工具系列】maven学习_jar_11

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

【高效开发工具系列】maven学习_ci_12

5.删除插件

进入目录,需要使用 sudo 权限删除插件

cd /Library

cd Internet\ Plug-Ins

 sudo rm -rf JavaAppletPlugin.plugin

检查 maven 的运行环境,和配置的 java 环境一致

mvn -version runtime

【高效开发工具系列】maven学习_ci_13

再次执行 maven 的打包命令,顺利打包.

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【高效开发工具系列】maven学习_java_14