基于 IDEA 进行 Maven 工程构建

发布时间:2024年01月22日

1. 构建概念和构建过程

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

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

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

在这里插入图片描述

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 类
在这里插入图片描述

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

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

搜索 lombok
在这里插入图片描述

选择一个使用较多的版本即可
在这里插入图片描述
在这里插入图片描述

将依赖放置在当前 java 工程的 pom.xml 中,刷新 maven
在这里插入图片描述

使用 lombok 的注解

@data:生成 get、set、toString 等方法
在这里插入图片描述

在这里插入图片描述

@AllArgsConstructor:生成有参构造方法
在这里插入图片描述

@NoArgsConstructor:生成无参构造
在这里插入图片描述

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

由于是通过命令行来执行,首先右键打开工程所在文件夹
在这里插入图片描述

进入到当前工程
在这里插入图片描述

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

在这里插入图片描述

从而直接定位到当前目录
在这里插入图片描述

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

因此需要在此路径下添加 JDK 版本:
在这里插入图片描述

再次执行就成功啦(其中会涉及到 maven 插件的使用,因为构建 maven 实际上就是在使用那些插件,maven-compiler-plugin:3.1:compile)
在这里插入图片描述

会看到产生了一个新目录 target,每次构建都会放在 target 目录中
在这里插入图片描述

字节码文件以 .class 为后缀
在这里插入图片描述

2.2 mvn clean

将之前编译的结果清理掉

在这里插入图片描述

2.3 mvn test

先在 maven 工程下面的 test/java 中创建一个 test 类,注意这个测试类的类名一定要以 Test 开头或者 Test 结尾
在这里插入图片描述

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

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

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

在这里插入图片描述

在这里插入图片描述

通过 mvn test 命令即可执行 test 下的测试类
在这里插入图片描述

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


测试报告
在这里插入图片描述
在这里插入图片描述

2.4 mvn package

打成 jar 包

注意命名是:maven 工程名 - maven 版本
在这里插入图片描述

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

注意打包后的文件,是对核心代码进行代码,测试文件是没有打包的,因为测试是发生在打包之前,打包成功,说明测试没有问题。因此打包为 jar 包和 war 包都没有测试文件
在这里插入图片描述

下面对 web 工程打包为 war 包

在这里插入图片描述

进入到 web 工程的 pom.xml 文件下
在这里插入图片描述

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

<build>
    <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

打包后文件
在这里插入图片描述

2.5 mvn install

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

首先在 maven_jave 工程的 pom.xml 中复制坐标,如下图
在这里插入图片描述

放入到 maven_web 工程的 pom.xml 的 depenence 标签中
在这里插入图片描述

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

下面对 maven_web 进行打包:发现报错了,报错原因是没有找到 maven_java 工程这个依赖
在这里插入图片描述

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

因此,这个时候就要用到 mvn install ,将 jar 和 war 包安装到本地仓库,在 java 工程下,通过执行 mvn install 将这个工程 jar 包添加到本地仓库中。
在这里插入图片描述

这个时候再去 maven_web 进行打包,就可以打包成功啦
在这里插入图片描述

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

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

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

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

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

先找到 maven_java 工程的坐标,然后一层一层去寻找
在这里插入图片描述
在这里插入图片描述
其所有的本地仓库的 jar 均均是如此,通过 pom.xml 中的坐标去寻找

3. 可视化方式项目构建

在这里插入图片描述

  • Lifecycle:生命周期
  • Plugins:插件
  • Dependences:工程依赖
    在这里插入图片描述

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

在这里插入图片描述

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
    
  • 插件、命令、周期三者关系(了解)

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

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

    最终进行构建的是插件!

文章来源:https://blog.csdn.net/qq_46450354/article/details/135734845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。