当前位置: 首页 > news >正文

Maven:基础知识

Maven

  • 概念图
  • 生命周期
  • 目录
  • 工程创建
    • 测试
  • 常用命令
    • COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。
    • 问题解决
  • pom.xml文件
    • properties配置示例
    • scope配置详解

概念图

在这里插入图片描述

  • 依赖管理
  • 构建项目
  • Maven 的底层核心实现项目的构建和管理必须通过插件完成,但插件本身并不包含在其核心程序当中。

生命周期

在 Maven 中,它拥有三套标准的生命周期,分别为CleanLifeCycle、DefaultLifeCycle 和 SiteLifeCycle 。每一套生命周期互相独立、互不影响。另外,每套生命周期包含一系列的构建阶段,这些阶段是有顺序的,会按照顺序执行(即执行后面的阶段会先自动执行前面的阶段)。

  • CleanLifeCycle:清理的生命周期
  • DefaultLifeCycle:默认的生命周期
  • SiteLifeCycle:站点的生命周期

目录

在 Maven 中,所有文件的存放目录都有明确的约定。标准目录结构如下:

目录名含义
项目根/项目目录根
pom.xml项目对象模型(Project Object Model),Maven项目中的文件
src/源代码目录根
main/项目主体目录根
java源代码目录
resources所需资源目录
filters资源过滤文件目录
assemblyAssembly descriptors
config配置文件目录根
test/项目测试目录根
java测试代码目录
resources测试所需资源目录
filters测试资源过滤文件目录
site与site相关的资源目录
target/输出目录根
classes项目主体输出目录
test-classes项目测试输出目录
site项目site输出目录

工程创建

创建的工程分为两类:一是Java项目,二是Web项目。创建命令如下:

<1>. Java项目:

mvn archetype:generate -DgroupId=JavaProjectPackage -DartifactId=JavaProjectName -DarchetypeArtifactId=maven-archetype-quickstart

<2>. Web项目:

mvn archetype:generate -DgroupId=WebProjectPackage -DartifactId=WebProjectName -DarchetypeArtifactId=maven-archetype-webapp

其中,属性含义:
-DgroupId:包名
-DartifactId: 项目名
-DarchetypeArtifactId: 项目类型
注: 一定要按照标准目录结构来构建工程。

测试

我们先使用命令行窗口在桌面上对 Maven 项目进行创建。步骤如下:

打开命令行窗口,进入桌面,输入命令:

//1.Java项目
mvn archetype:generate -DgroupId=cn.edu.MavenStudy -DartifactId=MavenJavaProjectTest -DarchetypeArtifactId=maven-archetype-quickstart//2.Web项目
mvn archetype:generate -DgroupId=cn.edu.MavenStudy -DartifactId=MavenWebProjectTest -DarchetypeArtifactId=maven-archetype-webapp

若是第一次创建,需要耐心等待 Maven 下载相应资源到本地仓库上(repository 文件)。如图:

在这里插入图片描述

所需的资源,如图:

在这里插入图片描述

再创建Web项目,如图:

在这里插入图片描述

常用命令

命令作用
mvn compile编译,将源代码编译成字节码文件(.class)
mvn clean清除,删除编译的目标文件target
mvn test测试,运行test包下的单元测试类(其方法名约定为XxxxTest)
mvn package将项目打包,文件存储在项目根目录的target目录中(Java项目打包成 jar文件,Web项目打包成 war文件)
mvn install将一个工程打包成 jar文件,存储在本地仓库里
mvn deploy若有私服,打包后上传到私服
mvn source:jar源码打包
mvn dependency:sources下载 jar包的源代码
mvn site查看报告和操作流程

COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。

在使用命令过程中,遇到了错误,如图:

在这里插入图片描述

原因:JDK版本不匹配。

问题解决

首先,打开命令行窗口,输入命令:java -version ,查看版本信息。如图:

在这里插入图片描述

找到 Maven/apache-maven-3.8.6/conf 目录下的 settings.xml 文件进行修改配置:

//根据本机JDK版本,添加以下配置:
<profile>  <id>jdk-16.0.2</id><activation><activeByDefault>true</activeByDefault><jdk>16</jdk></activation><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>16</maven.compiler.source><maven.compiler.target>16</maven.compiler.target><maven.compiler.compilerVersion>16</maven.compiler.compilerVersion></properties>  
</profile>

如图:

在这里插入图片描述

再次使用命令,成功执行。如图:

在这里插入图片描述

pom.xml文件

pom.xml为当前Maven项目配置文件,定义项目的基本信息,用于描述项目的maven坐标,依赖关系等。

一般情况下,Maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入工程。若要引用项目(已开发完毕并发布到远程仓库),则在pom.xml文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, Maven便会把jar包下载到本地 。接下来,简单介绍pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 基本配置 --><!-- 声明pom文件遵循POM模型的某个版本(必不可少,且对于Maven2与Maven3只能是4.0.0)--><modelVersion>4.0.0</modelVersion><!-- 定义当前项目隶属的实际项目组 --><groupId>cn.edu.MavenProject</groupId><!-- 定义当前项目的名称,主要区分一个groupId的多个项目 --><artifactId>MavenJavaProject</artifactId><!-- 定义当前项目所处的版本号(SNAPSHOT:测试版本;RELEASE:发布版本)--><version>1.0.0-SNAPSHOT</version><!-- 定义打包的类型(默认为jar,jar:Java项目;war:Web项目;pom:父级项目 )--><packaging>jar</packaging><!-- 定义pom常量,便于在pom中的直接引用 --><properties><demo.version>4.11</demo.version></properties><!-- 定义构件输出的附属构件,有时需要加上classifier才能唯一的确定该构件,否则会报错查找不到 --><classifier>...</classifier><!-- 定义当前项目的依赖关系 --><dependencies><!-- 每个dependency对应着一个jar包 --><dependency><!-- 坐标信息 --><groupId>org.apache.commons</groupId> <!-- 组织名称 --><artifactId>commons-lang3</artifactId> <!-- jar包名称 --><version>3.8.1</version> <!-- 版本号 --><!-- 定义Jar包的使用范围 --><scope>test</scope><!-- 设置指依赖是否可选,默认为false --><optional>false</optional><!-- 屏蔽依赖关系 --><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion></exclusions></dependency></dependencies><!-- 构建配置 --><build><!-- 构件的文件名,默认值为${artifactId}-${version} --><finalName>ProjectName</finalName><!-- 统一管理插件 --><pluginManagement><!-- 使用插件的列表 --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version>           <!-- 指定构建生命周期的阶段执行插件的配置 --><executions><execution><!-- 执行目标的标识符,用于标识构建过程中的目标或匹配继承过程中需要合并的执行目标 --><id>execution-id</id><!-- 指定目标的构建生命周期阶段,默认为目标被绑定到源数据里配置的阶段 --><phase>package</phase><!-- 配置的执行目标 --><goals><goal>demo-goal</goal></goals><!-- 配置是否被子POM继承 --><inherited>false</inherited></execution></executions><!-- 是否从该插件下载Maven扩展 --><extensions></extensions></plugin></plugins></pluginManagement></build><!-- 分发配置 --><!-- 执行mvn deploy,将项目生成的构件分发到远程Maven仓库,分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。 --><distributionManagement>    <!-- 项目生成的构件到远程仓库所需的信息 --><repository>		  <!-- 是否设置唯一版本号(由时间戳和构建流水号组成) --><uniqueVersion>true</uniqueVersion><!-- 目标仓库的id --><id>repository-id</id> <!-- 目标仓库的名字 --><name>repository-name</name><!-- 目标仓库的网址 --><url>file://${basedir}/target/deploy</url> </repository><!-- 测试版仓库 --><snapshotRepository><uniqueVersion/><id/>  <name/>   <url/>   </snapshotRepository> </distributionManagement> <!-- 仓库配置 --><!-- 远程仓库列表 --><repositories><!-- 连接远程仓库的信息 --><repository><!-- 处理远程仓库 正式发布版本 的下载 --><release><!-- 是否下载某种类型构件 --><enabled/><!-- 指定更新的频率 --><updatePolicy/><!-- Maven验证构件失败的处理 --><checksumPolicy/></release><!-- 处理远程仓库 快照版本 的下载(快照是一种特殊的版本,指定了某个当前的开发进度的副本) --><snapshots><enabled/><updatePolicy/><checksumPolicy/>  </snapshots><!-- 远程仓库唯一标识符,可以匹配settings.xml文件的远程仓库 --><id>repository-id</id>			<!-- 远程仓库名称 --><name>repository-name</name><!-- 远程仓库网址(形式为protocol://hostname/path) --><url>repository-url</url><!-- 指定仓库布局类型(default:默认,legacy:遗留) --><layout></layout></repository></repositories>
</project>

properties配置示例

<!-- 定义pom常量,便于在pom中的直接引用 -->
<!-- 示例 -->
<properties><demo.version>4.11</demo.version>
</properties>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${demo.version}</version><scope>test</scope>
</dependency>

scope配置详解

maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
scope值如下:

  • compile(编译范围):默认值,表示被依赖项目需要参与项目的编译、测试、运行、打包、发布。
  • runtime(运行时范围):表示被依赖项目不参与项目的编译。
  • test(测试范围):表示被依赖项目仅参与项目测试相关的工作(包括测试代码的编译和执行,但不会被打包和部署)。
  • provided(已提供范围):表示被依赖项目参与项目的编译、测试和运行,而其他依赖由JDK或容器提供。
  • system(系统范围):与 provided 相似,但不依赖Maven仓库,而是必须使用systemPath属性指定本地文件系统获取。
http://www.lryc.cn/news/1117.html

相关文章:

  • Web 框架 Flask 快速入门(一)flask基础与模板
  • 1CN/Jaccard/PA/AA/RA/Katz/PageRank/SimRank
  • YOLOv5-Backbone模块实现
  • 【C语言】程序环境和预处理
  • 9.关系查询处理和查询优化
  • 计算机组成原理(三)
  • C. Least Prefix Sum codeforces每日一题
  • ASEMI三相整流模块MDS100-16图片,MDS100-16尺寸
  • 【第37天】斐波那契数列与爬楼梯 | 迭代的鼻祖,递推与记忆化
  • Map集合
  • PyQt5编程扩展 3.2 资源文件的使用
  • Linux系统之文件共享目录设置方法
  • 上海亚商投顾:三大指数均涨超1% 芯片板块集体大涨
  • Harbor私有仓库部署与管理
  • 互联网架构之 “高可用” 详解
  • 分布式高级篇4 —— 商城业务(2)
  • 二分查找基本原理
  • 【Python实战案例】Python3网络爬虫:“可惜你不看火影,也不明白这个视频的分量......”m3u8视频下载,那些事儿~
  • UE4:使用样条生成随机路径,并使物体沿着路径行走
  • 计算机组成原理(判断题)
  • error: failed to push some refs to ... 就这篇,一定帮你解决
  • DAMA数据管理知识体系指南之数据仓库和商务智能管理
  • PHP的五种常见设计模式
  • 教你搞懂线段树,从基础到提高
  • C语言进阶——自定义类型:结构体
  • SpringSecurity学习笔记01
  • Python语言零基础入门教程(十一)
  • 现货白银基础知识
  • 数据库原理及应用基础知识点
  • 【数据结构】栈(stack)