基于 IDEA 进行 Maven 工程构建

1. 构建概念和构建过程

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员能够更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。

同时,项目构建还能够将多个开发人员的代码汇合到一起,并能够自动化项目的构建和部署,大大降低了项目的出错风险和提高开发效率。常见的构建工具包括 Maven、Gradle、Ant 等。

基于 IDEA 进行 Maven 工程构建_第1张图片

2. 命令方式项目构建

命令 描述
mvn compile 编译项目,生成target文件 (java 类编译为字节码文件)
mvn package 打包项目,生成jar或war文件
mvn clean 清理编译或打包后的项目结构
mvn install 打包后上传到maven本地仓库
mvn deploy 只打包,上传到maven私服仓库
mvn site 生成站点
mvn test 执行测试源码

2.1 mvn compile

现在 java 工程中创建一个 User 类
基于 IDEA 进行 Maven 工程构建_第2张图片

这里需要有 get、set 、toString 等方法,需要用到 lombok 这个 jar 包,来自动实现这些方法

访问 jar 包查询网站: https://mvnrepository.com/

搜索 lombok
基于 IDEA 进行 Maven 工程构建_第3张图片

选择一个使用较多的版本即可
基于 IDEA 进行 Maven 工程构建_第4张图片
基于 IDEA 进行 Maven 工程构建_第5张图片

将依赖放置在当前 java 工程的 pom.xml 中,刷新 maven
基于 IDEA 进行 Maven 工程构建_第6张图片

使用 lombok 的注解

@data:生成 get、set、toString 等方法
基于 IDEA 进行 Maven 工程构建_第7张图片

基于 IDEA 进行 Maven 工程构建_第8张图片

@AllArgsConstructor:生成有参构造方法
基于 IDEA 进行 Maven 工程构建_第9张图片

@NoArgsConstructor:生成无参构造
基于 IDEA 进行 Maven 工程构建_第10张图片

@Getter、@Setter:用于产生 get、set 方法

由于是通过命令行来执行,首先右键打开工程所在文件夹
基于 IDEA 进行 Maven 工程构建_第11张图片

进入到当前工程
基于 IDEA 进行 Maven 工程构建_第12张图片

mvn 相关的命令必须在 pom.xml 目录下使用,在地址栏输入 cmd 回车

基于 IDEA 进行 Maven 工程构建_第13张图片

从而直接定位到当前目录
基于 IDEA 进行 Maven 工程构建_第14张图片

这是由于利用 jenv 进行 JDK 版本管理时,在更换路径后,此路径没有 JDK 版本
在这里插入图片描述

因此需要在此路径下添加 JDK 版本:
基于 IDEA 进行 Maven 工程构建_第15张图片

再次执行就成功啦(其中会涉及到 maven 插件的使用,因为构建 maven 实际上就是在使用那些插件,maven-compiler-plugin:3.1:compile)
基于 IDEA 进行 Maven 工程构建_第16张图片

会看到产生了一个新目录 target,每次构建都会放在 target 目录中
基于 IDEA 进行 Maven 工程构建_第17张图片

字节码文件以 .class 为后缀
基于 IDEA 进行 Maven 工程构建_第18张图片

2.2 mvn clean

将之前编译的结果清理掉

基于 IDEA 进行 Maven 工程构建_第19张图片

2.3 mvn test

先在 maven 工程下面的 test/java 中创建一个 test 类,注意这个测试类的类名一定要以 Test 开头或者 Test 结尾
基于 IDEA 进行 Maven 工程构建_第20张图片

测试需要使用到 junit 这个依赖 jar 包

同理访问 jar 包查询网站: https://mvnrepository.com/

搜索 junit ,并选择最多的人的一个版本,添加到 pom.xml 中

基于 IDEA 进行 Maven 工程构建_第21张图片

基于 IDEA 进行 Maven 工程构建_第22张图片

通过 mvn test 命令即可执行 test 下的测试类
基于 IDEA 进行 Maven 工程构建_第23张图片

注: 可通过 mvn clean test,依次先执行 clean 再执行 test


测试报告
基于 IDEA 进行 Maven 工程构建_第24张图片
基于 IDEA 进行 Maven 工程构建_第25张图片

2.4 mvn package

打成 jar 包

注意命名是:maven 工程名 - maven 版本
基于 IDEA 进行 Maven 工程构建_第26张图片

在执行打包的过程中,会对核心功能和测试功能进行编译,测试不通过会导致打包失败

注意打包后的文件,是对核心代码进行代码,测试文件是没有打包的,因为测试是发生在打包之前,打包成功,说明测试没有问题。因此打包为 jar 包和 war 包都没有测试文件
基于 IDEA 进行 Maven 工程构建_第27张图片

下面对 web 工程打包为 war 包

基于 IDEA 进行 Maven 工程构建_第28张图片

进入到 web 工程的 pom.xml 文件下
基于 IDEA 进行 Maven 工程构建_第29张图片

如果报错,可能是war包打包插件和jdk版本不匹配:pom.xml 添加以下代码即可

<build>
    
    <plugins>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-war-pluginartifactId>
            <version>3.2.2version>
        plugin>
    plugins>
build>

打包后文件
基于 IDEA 进行 Maven 工程构建_第30张图片

2.5 mvn install

如果想要使用自己的 maven 项目,就需要将其打包为 jar 包,比如在 maven_web 中使用 maven_java 这个工程。

首先在 maven_jave 工程的 pom.xml 中复制坐标,如下图
基于 IDEA 进行 Maven 工程构建_第31张图片

放入到 maven_web 工程的 pom.xml 的 depenence 标签中
基于 IDEA 进行 Maven 工程构建_第32张图片

这个时候 maven_java 作为一个 jar 包依赖,可以被 maven_web 所使用

下面对 maven_web 进行打包:发现报错了,报错原因是没有找到 maven_java 工程这个依赖
基于 IDEA 进行 Maven 工程构建_第33张图片

为什么呢?因为在 pom.xml 中设置都依赖首先会去本地仓库中寻找,没有会去中央仓库中寻找,而我们建立的 maven_java 工程即不在本地也不在中央仓库,因此报错。

因此,这个时候就要用到 mvn install ,将 jar 和 war 包安装到本地仓库,在 java 工程下,通过执行 mvn install 将这个工程 jar 包添加到本地仓库中。
基于 IDEA 进行 Maven 工程构建_第34张图片

这个时候再去 maven_web 进行打包,就可以打包成功啦
基于 IDEA 进行 Maven 工程构建_第35张图片

因此如果要使用自己的工程,首先需要将其 install 到自己的本地仓库中,否则是找不到的。

注意:打包(package)和安装(install)的区别是什么

打包是将工程打成jar或war文件,保存在target目录下

安装是将当前工程所生成的jar或war文件,安装到本地仓库,会按照坐标保存到指定位置

上述讲解了 jar 包通过 install 安装到本地仓库,具体安装到哪里呢?

先找到 maven_java 工程的坐标,然后一层一层去寻找
基于 IDEA 进行 Maven 工程构建_第36张图片
基于 IDEA 进行 Maven 工程构建_第37张图片
其所有的本地仓库的 jar 均均是如此,通过 pom.xml 中的坐标去寻找

3. 可视化方式项目构建

基于 IDEA 进行 Maven 工程构建_第38张图片

  • Lifecycle:生命周期
  • Plugins:插件
  • Dependences:工程依赖
    基于 IDEA 进行 Maven 工程构建_第39张图片

package:java 工程打 jar 包,web 工程打 war 包。

基于 IDEA 进行 Maven 工程构建_第40张图片

4. 构建插件、命令、生命周期命令之间关系

  • 构建生命周期

    我们发现一个情况!当我们执行package命令也会自动执行compile命令!

    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mybatis-base-curd ---
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mybatis-base-curd ---
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mybatis-base-curd ---
    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mybatis-base-curd ---
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mybatis-base-curd ---
    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mybatis-base-curd ---
    [INFO] Building jar: D:\javaprojects\backend-engineering\part03-mybatis\mybatis-base-curd\target\mybatis-base-curd-1.0-SNAPSHOT.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  5.013 s
    [INFO] Finished at: 2023-06-05T10:03:47+08:00
    [INFO] ------------------------------------------------------------------------
    

    这种行为就是因为构建生命周期产生的!构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!!!

    构建周期作用:会简化构建过程

    例如:项目打包 mvn clean package即可。

    主要两个构建生命周期:

    • 清理周期:主要是对项目编译生成文件进行清理

      包含命令:clean

  • 默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分

    包含命令:compile -  test - package - install - deploy
    
  • 插件、命令、周期三者关系(了解)

    周期→包含若干命令→包含若干插件

    使用周期命令构建,简化构建过程!

    最终进行构建的是插件!

你可能感兴趣的:(JAVA进阶之路,intellij-idea,maven,pycharm)