Maven:基础知识

news2025/5/29 6:38:02

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.coloradmin.cn/o/334834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VC++打开或关闭目标进程的声音(扬声器)(附源码)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…

一刷代码随想录——单调栈

每日温度739题目描述&#xff1a;给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

spring security 核心类 和请求登陆过程

核心类图2. 执行登陆 首先请求被拦截器 UsernamePasswordAuthenticationFilter 拦截 看源代码可以看出默认拦截的是 /login 请求地址 当然这个地址是可以被配置的 private static final AntPathRequestMatcher DEFAULT_ANT_PATH_REQUEST_MATCHER new AntPathRequestMatche…

DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题

一、了解dfs1、DFS&#xff08;Depth First Search&#xff09;DFS在我看来就是一条路走到黑&#xff0c;直到无路可走的情况下&#xff0c;才会选择回头&#xff0c;然后重新选择一条路&#xff08;官方说法即“优先考虑深度”&#xff09;整个进程反复进行直到所有节点都被访…

Allegro如何添加ICT操作指导

Allegro如何添加ICT操作指导 当PCB板需要做飞针测试的时候,通常需要在PCB设计的时候给需要测试的网络添加上ICT。 如图: Allegro支持给网络添加ICT,具体操作如下 首先在库中创建一个阻焊开窗的过孔,比如via10-ict一般阻焊开窗的尺寸比盘单边大2mil 在PCB中选择Manufacture…

Linux基础命令1(常见的系统进程、状态命令)

目录 Linux命令格式 Linux快捷按键 常用系统命令 man 查看命令的帮助信息 echo 输出信息&#xff08;将信息输出到屏幕上面&#xff09; date 查看系统的日期、时间 timedatectl 设置系统时间&#xff0c;主要是时区&…

程序环境--翻译+执行

ANSI C标准下&#xff0c;有两种程序环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 翻译环境包括&#xff1a;预处理&#xff08;预编译&#xff09;编译汇编链接。四个步骤。 第2种是执行/运行环境&#xff0c;它用于实际执行代码。 链接…

UPC-2023新生个人训练赛第18场-Rank1

问题 B: 2的N次方 题目描述 输入n行&#xff0c;每行一个整数x&#xff0c;输出2的x次方的个位是多少&#xff1f;2的3次方表示3个2相乘&#xff0c;结果是8 输入 输入n行&#xff0c;每行一个整数x 输出 输出n行&#xff0c;每行一个整数&#xff0c;2的x次方的个位。 …

Flink CEP 在抖音电商的业务实践

摘要&#xff1a;本文整理自抖音电商实时数仓研发工程师张健&#xff0c;在 FFA 实时风控专场的分享。本篇内容主要分为四个部分&#xff1a;Flink CEP 简介业务场景与挑战解决方案实践未来展望Tips&#xff1a;点击「阅读原文」查看原文视频&演讲 ppt01Flink CEP 简介Flin…

论文投稿指南——中文核心期刊推荐(冶金工业 2)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

23种设计模式之策略模式

一、概念 就是将一系列算法封装起来&#xff0c;并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。 策略模式属于对象行为模式&#xff0c;它通过对算法进行封装&#xff0c;把使用算法的责任和算法的实现分割开来&#xff0c;并委派给不同的对象对这些算…

BCN点击试剂diSulfo-Cy5-PEG3-BCN,二磺酸三聚乙二醇环丙烷环辛炔,纯度 95%+

【中文名称】二磺酸-三聚乙二醇-环丙烷环辛炔【英文名称】 diSulfo-Cy5-PEG3-BCN&#xff0c;BCN-PEG-Sulfo Cy5【CAS号】N/A【分子式】C51H68N4O12S2【分子量】993.24【基团】BCN基团【纯度】95%【规格标准】1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&#xff0c;…

2-ChatGPT插件到Google浏览器,并进行ChatGPT工作。

ChatGPT插件到Google浏览器&#xff0c;并进行ChatGPT工作。1&#xff0c;首先&#xff0c;在装插件ChatGPT forGoogle插件时&#xff0c;我没安装成功&#xff0c;问题是我没有区分Google浏览器和双核浏览器的差别。2&#xff0c;如何使用ChatGPT在浏览器上进行工作。1&#x…

[future 2022] 基于特征选择的DDoS攻击流分类方法

https://www.sciencedirect.com/science/article/pii/S0167739X22000474highlights•我们设计了一种特征选择方法来选择独立和相关的特征。•我们设计了一种方法来识别物联网和复杂的 DDoS 攻击流。•该体系结构在有效性和效率方面优于比较方法。摘要分布式拒绝服务 (DDoS) 攻击…

CentOS8基础篇3:使用vim编辑文档

一、vim编辑器 vim 编辑器共有三种工作模式&#xff0c;分别是命令模式、输入模式和末行模式。 〖例2.24〗使用vim编辑器创建并编辑文件hello.c。 二、查看文件内容命令 1. more/less 浏览文件全部内容 当文件内容过多时&#xff0c;可以用more或less命令来查看。 命令格式…

HTTP缓存看这一篇就够了

前言 HTTP缓存机制是优化web性能的重要手段&#xff0c;也是优化用户体验的重要一环。了解和熟悉HTTP缓存机制也成为了前端工作者必不可少的技能。 HTTP缓存是用于临时存储网页资源&#xff08;如HTML页面、图像等&#xff09;&#xff0c;以减少服务器延迟的一种技术。HTTP缓…

nim语言在不同操作系统安装

官网&#xff1a; Nim Programming Language 学习文档&#xff1a; Nim文档概述 Tutorial (part I)The Nim one deals with basics. 官方下载地址&#xff1a;Download - Nim Programming Language 目录 Mac OS Ubuntu centos Mac OS 安装语言 brew install nim 安装…

nodejs基于vue的饭店点餐外卖平台网站

本系统主要实现了管理员&#xff1a;首页、个人中心、用户管理、菜品分类管理、菜品信息管理、菜品评价管理、系统管理、订单管理,用户&#xff1a;首页、个人中心、菜品评价管理、我的收藏管理、订单管理,前台首页&#xff1a;首页、菜品信息、菜品资讯、个人中心、后台管理、…

尚医通(九)数据字典模块前后端 | EasyExcel

目录一、数据字典介绍1、什么是数据字典2、页面展示效果3、数据字典表设计4、数据分析5、根据页面效果分析数据接口二、搭建数据字典模块三、数据字典列表接口1、model模块添加数据字典实体2、添加数据字典mapper3、添加数据字典service4、添加数据字典controller四、数据字典列…

【百宝书】ChatGPT真的会成为MOSS吗?如果MOSS真的存在,地球和人类的结局会是怎么样的。

大家好&#xff0c;我是涵子&#xff0c;今天我们紧随潮流&#xff0c;聊聊ChatGPT会成为MOSS吗&#xff1f;如果MOSS真的存在&#xff0c;地球和人类的结局会是怎么样的。 本次借鉴内容&#xff1a; 程序yang - ChatGPT的火爆出圈&#xff0c;你对它有几分了解&#xff1f;_程…