maven的项目管理和构建生命周期

maven现在已经是工程项目中最常用到的项目管理和构建工具之一。

项目管理:

就是围绕整个项目结构,配置,依赖,和协作。

(1)结构

他首先定了一个项目的代码结构,给开发者定下了一个标准化的目录结构,结构如下:

src/main/java:存放主代码(Java 文件)。

src/main/resources:存放主资源文件(如配置文件)。

src/test/java:存放测试代码。

src/test/resources:存放测试资源文件。

target:存放构建生成的文件(如编译后的 .class 文件、打包的 JAR/WAR 文件等)

正是这个结构,让maven可以自动处理和识别,统一标准化的结构也帮助开发者的配置处理,提高效率。

(2)依赖

配置就是通过pom文件,配置第三方库和自己的其他项目。

pom文件中声明依赖groupId、artifactId 和 version,根据这些maven会自动下载依赖到本地仓库,解决版本不一致的问题,传递依赖本项目的其他依赖项目。

(3)项目配置

项目配置,也是通过pom文件。通过groupId、artifactId 和 version这些元素配置项目的基本信息。

依赖配置:pom文件里面的插件dependencies,这里是项目依赖项。

插件配置:包括在pom文件里面的插件plugins,编译插件,打包插件配置。

(4)模块管理和协作

pom里面的modules,管理模块。

协作就是大家用同一个pom文件,就可以顺利下载依赖到本地,构建项目让项目顺利的跑起来。

构建:

构建就是build项目,整个build的环节包括测试,测试,打包,部署等任务。让手动操作变少,让整个构建流程标准化。

构建生命周期

  • validate:验证项目是否正确,所有必要信息是否可用。
  • compile:编译项目的源代码。
  • test:运行单元测试。
  • package:将编译后的代码打包成 JAR/WAR 文件。
  • verify:验证打包后的文件是否符合质量标准。
  • install:将打包后的文件安装到本地 Maven 仓库,供其他项目使用。
  • deploy:将打包后的文件部署到远程 Maven 仓库,供团队或外部项目使用。

涉及到插件(这个也在pom文件里面有)

  • maven-compiler-plugin:用于编译 Java 代码。
  • maven-surefire-plugin:用于运行单元测试。
  • maven-jar-plugin:用于打包 JAR 文件。
  • maven-war-plugin:用于打包 WAR 文件。

实际项目中的使用:

光看maven作用,pom文件的配置信息,肯定会很枯燥。涉及到实际项目中,假设两个项目A和B彼此在不同的文件夹,不同的idea的project。但是二者存在依赖关系,具体的依赖关系,就是项目B依赖项目A。(也就是在B的pom文件里面,依赖项目A)。

问题就来了,二者使用同一个setting文件。

(1)可不可以,在不上传打包项目A到远程仓库,B项目可以直接使用本地仓库获取到A项目,怎么做?

可以 maven 命令

mvn clean install

clean是把target目录,保证目录干净,防止后面生成的文件能正常生成。

install名字含义就是"安装",就是把target目录下面的jar包 "安装"到本地仓库中。(也就是本地.m2 依赖库下面,会把target目录下的新生成的包覆盖本地仓库的包)

这样就是在本地,项目A修改代码,install"安装"到本地仓库。项目A和项目B 使用同一个配置setting文件,自然配置的本地仓库也是同一个,A的包覆盖本地的包,B项目只需要通过"project reload" 或者 "mvn clean install -U" 强制更新B的项目依赖。

(有时候会有问题,就是本地仓库没有变化,可以通过手动删除对应项目A的本地仓库的jar包。然后在install A项目,这样就可以看到对应项目A的jar包安装到项目B的本地依赖库。)

(2)项目B和项目A,在本地调好,怎么样上传到远程仓库,jekins怎么做到这些的?

实际上jekins也是通过这些maven命令构建项目。

主要就是clean(清除target目录),编译(生成target目录下面.class文件),打包(package,生成到target目录下jar包)。

有的项目会配置verify(校验代码风格这些)

install(把target的jar包安装到本地仓库)

deploy(把打包后的文件上传到远程仓库)

jekins也是通过这些命令设置构建部署项目。

(3)maven这些命令以及对应的构建生命周期,具体做了什么,以及后面的目的?

实际上maven命令,都有说到,以下是一个完整的构建生命周期(也可以说是maven命令)和作用

阶段 作用
validate 验证项目是否正确,所有必要信息是否可用。
compile 编译项目的源代码。
test 使用单元测试框架运行测试(不会打包或部署)。
package 将编译后的代码打包成 JAR/WAR 等可分发格式。
verify 对打包后的文件进行验证,确保质量符合标准。
install 将打包后的文件安装到本地 Maven 仓库,供其他项目使用。
deploy 将打包后的文件部署到远程 Maven 仓库,供团队或外部项目使用。

idea里面maven配置以及日常使用的需要注意的点:

本地依赖库下载不到远程仓库的包

我最近的项目中遇到一个问题,就是远程仓库里面的包,就是下载不到本地,导致本地项目报错,找不到对应的依赖包。配置以下两个参数VM Options (导入程序的虚拟机选项)

mavne : importing

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

作用就是Maven 中用于处理 HTTPS SSL/TLS 证书验证 的 JVM 参数。它们的作用是绕过或放宽对 HTTPS 证书的验证,通常用于开发环境或与自签名证书的私有仓库交互时。

mavne:runner

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -DarchetypeCatalog=internal

配置好后包就下载下来了,甚至有些包在页面找不到对应的包,也都下载下来,原因是什么:

(1)是证书问题,证书问题就是导致下载到本地报错下载不下来。

(2) Archetype 目录问题,使用了 Maven Archetype(项目模板生成工具),添加 -DarchetypeCatalog=internal 可以避免 Maven 尝试从远程下载 Archetype 目录,从而减少网络请求,提高构建效率。

(3)依赖关系,仓库里面有A,我有一个B项目包依赖A和C,但是在Nexus页面找不到C的jar包,但是也能下载下来,是因为A依赖C,下载A也把C带下来。

打包

打包风格过不去

-Dpmd.skip=true -Dcheckstyle.skip=true

(Maven 构建过程中用于跳过 PMD 和 Checkstyle 静态代码分析插件的参数。它们的作用是告诉 Maven 在构建时忽略这些代码质量检查工具的执行,从而加快构建速度或避免因代码风格问题导致的构建失败)

相关推荐
Alt.9几秒前
SpringMVC基础三(json)
java·开发语言
刘大猫2618 分钟前
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
java·人工智能·后端
滴水可藏海32 分钟前
EasyExcel系列:读取空数据行的问题
java
王小二_Leon40 分钟前
JAVA中正则表达式的入门与使用
java·正则表达式
骑牛小道士1 小时前
java基础 运算符
java
晴天毕设工作室2 小时前
计算机毕业设计指南
java·开发语言·python·计算机网络·课程设计
jhtwn2 小时前
Java NIO之Buffer
java·开发语言
逆水寻舟2 小时前
尚硅谷2019版Java网络编程笔记
java·网络·笔记
谦行2 小时前
前端视角 Java Web 入门手册 5.2:真实世界 Web 开发——Spring Boot 应用启动流程
java·后端
猿java2 小时前
你使用过 Service Mesh吗?
java·面试·service mesh