首页 > 其他分享 >Maven 个人笔记

Maven 个人笔记

时间:2024-03-28 11:59:57浏览次数:29  
标签:依赖 个人 项目 笔记 Maven 编译 测试 打包

 常见问题整理

1. mvn项目的生命周期是怎样的

        Maven项目的主要生命周期阶段包括编译、测试、打包等,以下是这些阶段的详细介绍:

编译(Compile)

  • 在编译阶段,Maven将项目的源代码(通常是Java源代码)编译成可执行代码。这涉及到源代码的语法检查、错误修正以及将源代码转换为字节码(.class文件)。
  • Maven使用配置的编译器(如Java编译器)执行此任务,并确保所有必要的依赖库都已正确解析和包含。

测试(Test)

  • 测试阶段用于验证编译后的代码是否符合预期。Maven将运行项目中的单元测试,这通常通过集成诸如JUnit这样的测试框架来实现。
  • 在测试执行期间,Maven会加载项目所需的测试依赖项,并运行定义在测试类中的测试方法。测试结果会生成报告,以便开发者检查代码的正确性和完整性。

打包(Package)

  • 打包阶段是将编译和测试后的代码和资源文件打包成可分发的格式,如JAR(Java Archive)或WAR(Web Application Archive)文件。
  • Maven根据项目的类型(如库或Web应用)和POM文件中定义的打包配置,使用适当的打包器执行此任务。生成的包文件包含了运行项目所需的所有依赖和资源。

除了上述核心阶段外,Maven还提供了其他阶段和生命周期,例如:

清理(Clean)

        用于删除构建过程中生成的所有文件,如编译后的类文件和打包生成的JAR/WAR文件。这有助于确保每次构建都是从头开始,避免旧的构建产物干扰新的构建。

安装(Install)

        将打包后的文件安装到本地Maven仓库中,供其他项目依赖使用。

部署(Deploy)

        将打包后的文件部署到远程仓库中,供其他开发者或系统使用。

此外,Maven还允许用户通过插件机制扩展和自定义这些阶段,以满足特定的构建需求。

要执行Maven项目的这些阶段,开发者通常会在命令行中运行相应的Maven命令,如mvn clean package(执行清理和打包阶段)或mvn clean install(执行清理、编译、测试和安装阶段)。Maven将按照定义的顺序依次执行这些阶段,并确保每个阶段都成功完成后才进入下一个阶段。

 2. dependency的optional标签有什么用

        当在Maven项目中将一个依赖标记为<optional>true</optional>时,这意味着该依赖对于当前项目来说是必需的,但对于使用该项目的其他项目来说,这个依赖是可选的。换句话说,如果一个项目A依赖于项目B,而项目B有一个可选的依赖C,那么项目A不会自动继承项目B的可选依赖C。但项目B的子模块可以继承依赖C       

        另外scope为test / provided的依赖也不会在项目间传递. 

3. mvn依赖作用域scope介绍        

        mvn依赖作用域(Scope)是Maven中用来控制依赖元素使用范围的重要元素。具体来说,它决定了Jar包在哪些范围被加载和使用,这些范围包括编译、测试、运行等阶段,并且还可以控制是否被打入包中。

即scope的一个作用是maven lifecycle会用到哪个scope. 另一个作用是在依赖传递时发生.

Scope的主要分类及其含义如下:

  1. compile:这是默认的作用域。被依赖项目需要参与到当前项目的编译、测试、打包、运行等所有阶段。因此,compile范围的依赖会被打包,并随着项目一起发布。
  2. test:这个作用域的依赖仅用于测试阶段,包括测试代码的编译和执行。它们不会被打包到最终的项目中,例如junit这样的测试框架就属于这个范围。
  3. runtime:被依赖项目在编译阶段不需要,但在测试和运行阶段需要。与compile相比,runtime的依赖跳过了编译阶段,例如JDBC驱动就属于这个范围。
  4. provided:这个作用域的依赖理论上可以参与编译、测试、运行等所有阶段,但在打包阶段会被排除。这意味着虽然依赖在编译和测试时是必要的,但在运行时,它会由JDK、容器或其他设施提供,因此不需要被打包到项目中。例如,在开发web应用时,servlet-api.jar在编译时需要,但在运行时由应用服务器提供,因此应该使用provided作用域。另外还有lombok,只在编译时使用。
  5. system:这个作用域与provided类似,但依赖不会从Maven仓库下载,而是从本地文件系统获取。使用时需要添加systemPath属性来定义路径。

理解并正确设置mvn依赖作用域,可以帮助优化项目的依赖管理,减少不必要的包大小,并提高项目的可维护性。

4. IDEA maven插件介绍

        建议先clean,再执行其他命令,其他命令并不包含clean,防止旧的编译class和资源影响最新代码执行效果。

5. 父项目和子模块依赖管理

6. Maven的POM文件打包方式怎么选

待更新完善......

标签:依赖,个人,项目,笔记,Maven,编译,测试,打包
From: https://blog.csdn.net/u011361774/article/details/137093793

相关文章

  • 《自动机理论、语言和计算导论》阅读笔记:p49-p67
    《自动机理论、语言和计算导论》学习第4天,p49-p67总结,总计19页。一、技术总结1.DeterministicFiniteAutomata(DFA)vsNondeterministicFiniteAutomata(NFA)(1)DFA定义(2)NFA定义A"nonedeterministic"finiteautomatahasthepowertobeinseveralstatesatonce......
  • 算法小笔记0328
    1ios::sync_with_stdio(0);ios::sync_with_stdio(false);是C++中用于关闭C++输入输出流(iostream)与C输入输出库(stdio)同步的语句。默认情况下,C++的流库与C的stdio库是同步的,这意味着你可以混用cin,cout和scanf,printf等而不会出现问题。但是这种同步会导致性能下......
  • On Java8读书笔记
    ObjectsEveryWhere使用Reference掌控对象掌控一个对象有两种不同的方式:直接掌控变量本身or间接掌控一个"通道",通过"通道"可以掌控对象在Java中,我们通过间接的方式掌控对象,而这个"通道"就是ReferenceReference不同于对象本身,对象本身往往是"臃肿的"(对象内包括字段和......
  • 基于HarmonyOS的阅读笔记助手的APP开发第一天
    1.设计原型书籍界面原型书籍阅读界面原型笔记界面原型笔记记录界面原型软件设置界面原型......
  • opensips的dispatcher模块笔记
    操作系统:CentOS7.6_x64opensips版本:2.4.9dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。我将从以下几方面进行展开:模块数据库说明模块参......
  • 学习java时候的笔记(四)
    数组什么是数组?数组指的是一种容器,可以用来储存同种数据类型的多个值一维数组一维数组的定义:格式1数据类型[]数组名例:int[]array格式2数据类型数组名[]例intarray[]一维数组的静态初始化初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中......
  • java基础 韩顺平老师的 面向对象(高级) 自己记的部分笔记
     373,类变量引出 代码就提到了问题分析里的3点packagecom.hspedu.static_;publicclassChildGame{publicstaticvoidmain(String[]args){//定义一个变量count,统计有多少小孩加入了游戏intcount=0;Childchild1=newChild(......
  • 郭天祥新概念51单片机(第四期读书笔记)
    时钟周期、状态周期、机器周期、指令周期与晶振频率之间的关系1、晶振频率与脉冲的关系假设单片机的晶振频率是12MHz,那么它的一个脉冲为1/12微秒;晶振单位时间发出的脉冲则为:12∗......
  • SpringMVC学习笔记
    1、概述SpringMVC是一种表现层的框架技术,用于web层的功能开发,是对Servlet进行的封装;主要的作用是接收请求和数据,响应结果,所以如何处理请求和响应是SpringMVC的重点2、请求2.1get请求单个参数:localhost/commonParam?param=@Controller@ResponseBodypublicClassUserCont......
  • python笔记(3)基本数据类型简介
    目录python3的六个标准数据类型Numbers(数字) 数值运算String(字符串)List(列表)Tuple(元组)Sets(集合)set()函数有两用方式使用set运算Dictionaries(字典)python3的六个标准数据类型Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionaries(字典)Set(集合)......