Maven入门教程(三):Maven语法

news2024/10/5 17:28:41

视频教程:Maven保姆级教程
Maven入门教程(一):安装Maven环境
Maven入门教程(二):idea/Eclipse使用Maven
Maven入门教程(三):Maven语法
Maven入门教程(四):Nexus私服
Maven入门教程(五):自定义脚手架

6.Maven基本用法

6.1 导入jar包

pom.xml是maven的核心配置文件,在pom.xml中可以定义工程的依赖关系,和引用jar包的信息。

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

这里引用了junit的jar包,版本是4.12

maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,maven会将与运行相关的依赖引入classpath中。

依赖范围更为通俗的理解,其实就是给依赖包打标记,例如将 A 依赖包标记为“compile”,Maven 就知道 A 依赖包在项目编译的时候要被引入到 classpath 中。

可选配置有

compile:编译

test:测试,只对于测试classpath有效

provided:编译和测试classpath有效,但在运行时无效

runtime:运行时

system:本地,不从库里找

import:功能为将目标pom.xml 文件中元素 <dependencyManagement> 的配置导入合并到当前 pom.xml 文件的元素 <dependencyManagement>

若不指定则默认 compile。

6.2 配置插件

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
      <configuration>
        <path>/</path>
        <port>8080</port>
      </configuration>
    </plugin>
  </plugins>
</build>

pligins用于定义插件,此处引用了tomcat的插件。path是访问路径,如果我们同时运行多个项目,访问路径都是根路径,可以通过修改port端口号来访问项目。

6.3 maven命令

6.3.1 idea

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

命令clean tomcat7:run

配置成功后可以在工具栏里看到刚才配置的命令,点击绿色的三角

在这里插入图片描述

在浏览器里可以看到:

在这里插入图片描述

6.3.2 Eclipse

在这里插入图片描述

在这里插入图片描述

输入clean tomcat7:run

6.4 查看jar包

6.4.1 idea

通常,在pom.xml中加入<dependency>后maven会自动下载jar包

在项目的External Libraries中可以看到maven下载的jar:

在这里插入图片描述

如果在pom.xml中加入<dependency>后,在左侧看不到jar包,可以右键点击pom.xml,选择Maven->Reimport

在这里插入图片描述

或者在IDEA右侧点击Maven Project:

在这里插入图片描述

jar包没有正确引入的时候,pom.xml中会出现错误提示:

在这里插入图片描述

未正确引用的依赖,颜色是不一样的。具体提示的颜色与IntelliJ的主题有关。

6.4.2 Eclipse

在这里插入图片描述

6.5 排除jar冲突

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<!-- 排除冲突jar包 -->
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

6.6 引用本地jar

<dependency>
  <groupId>com.test</groupId>  <!--自定义-->
  <artifactId>xxxx</artifactId>    <!--自定义-->
  <version>xxxx-SNAPSHOT</version> <!--自定义-->
  <scope>system</scope> <!--需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
  <systemPath>${project.basedir}/lib/xxx.jar</systemPath> <!--项目根目录下的lib文件夹下-->
</dependency>

7.Maven继承

7.1 pom工程

pom工程中只有一个pom.xml文件,不包含java和resource目录,它只用来保存一些依赖信息。

在pom.xml中添加依赖信息信息,如junit、mysql等,也可以定义插件信息:

<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">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.maven.test</groupId>
	<artifactId>test-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<!-- 自定义属性 -->
	<properties>
		<junit.version>4.12</junit.version>
		<mysql.version>5.1.32</mysql.version>
	</properties>
	<!--继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息。-->
	<dependencyManagement>
		<dependencies>
			<!--用于junit测试 -->
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
			</dependency>
			<!-- mysql驱动包 -->
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>${mysql.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<build>
	    <!--产生的构件的文件名,默认值是${artifactId}-${version}。-->
		<finalName>${project.artifactId}</finalName>
		 <!--使用的插件列表 。-->
		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin> <!--plugin元素包含描述插件所需要的信息。-->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<!--作为DOM对象的配置-->
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
		<!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->
		<pluginManagement>
			<plugins>
				<!-- 配置Tomcat插件 -->
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<version>2.2</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

7.2 创建子工程

在这里插入图片描述

在子工程中添加父工程里定义过的依赖:

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
	</dependency>
</dependencies>

可以不用写版本号<version>了,它会自动继承父工程里定义的版本。

8.打包

在这里插入图片描述

clean 清除编译结果

package 打包

install 安装到本地仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952634.html

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

相关文章

2023年高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

Qt按钮按动、划过背景设置

title: Qt按钮按动、划过背景设置 date: 2023-08-30 19:29:49 tags: Qt按钮按钮背景设置按钮动态效果 categories:Qt学习之路 给按钮添加背景后&#xff0c;原先按钮的按动效果就没了&#xff0c;&#xff08;按钮没有反馈&#xff0c;我的手就会一直在抖&#xff0c;哈哈哈哈…

最新社区团购电商小程序源码 无bug完美运营版+详细搭建部署教程

分享一个开源社区团购电商小程序源码&#xff0c;无bug完美运营版&#xff0c;含完整前后端详细搭建部署教程。 系统运营模式&#xff1a;整合线下社区资源&#xff0c;由各快递代收点、社区便利店、社区物业、业主等发起的社区微信群&#xff0c;推送商品信息&#xff0c;消费…

leetcode原题: 最小值、最大数字

题目1&#xff1a;最小值 给定两个整数数组a和b&#xff0c;计算具有最小差绝对值的一对数值&#xff08;每个数组中取一个值&#xff09;&#xff0c;并返回该对数值的差 示例&#xff1a; 输入&#xff1a;{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出&#xff1a;3&…

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 一&#xff1a; $(cd $(dirname $0); pwd) 命令详解 path $(cd $(dirname $0); pwd)解析&#xff1a; 1、取当前运行脚本的所在路径&#xf…

【AI模型】LibTorch深度学习框架配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍LibTorch深度学习框架配置与使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

Jmeter性能压测 —— 高并发思路

测试场景&#xff1a;模拟双11&#xff0c;百万级的订单量一个物流信息的查询接口。 条件&#xff1a;接口响应时间<150ms以内。10万并发量每秒。 设计性能测试方案 1、生产环境 ①10W/S--并发量&#xff08;架构师/技术负责人提供&#xff09; ②20台机器&#xff08;…

java八股文面试[多线程]——ThreadLocal底层原理和使用场景

源码分析&#xff1a; ThreadLocal中定义了ThreadLocalMap静态内部类&#xff0c;该内部类中又定义了Entry内部类。 ThreadLocalMap定了 Entry数组。 Set方法&#xff1a; Get方法&#xff1a; Thread中定义了两个ThreaLocalMap成员变量&#xff1a; Spring使用ThreadLocal解…

STP生成树

文章目录 一、二层环路带来的问题二、生成树定义三、STP相关概念BPDU&#xff08;Bridge Protocol Data Unit&#xff09;定义分类用来选举的参数 四、STP的选举机制五、STP初始化流程交换机端口状态 六、STP计时器七、STP拓扑变更机制八、STP的问题九、RSTP&#xff08;Rapid …

200 Smart 与 PLC 4000 PN/PN Coupler通讯

1、打开200 smart 菜单栏选择工具&#xff0c;profinet网络&#xff0c;添加控制器 2、200 Smart PN /PN Coupler 做为控制器组态IO均配置128个BYTE. 3、S7400 在硬件配置里组态 PN/PN Coupler通讯 并添加报文长度为128BYTE 4、通过程序将200 msart中的IO点写到DB数据块内

c++11 标准模板(STL)(std::basic_stringstream)(一)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_stringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::alloc…

机器学习基础17-基于波士顿房价(Boston House Price)数据集训练模型的整个过程讲解

机器学习是一项经验技能&#xff0c;实践是掌握机器学习、提高利用机器学习 解决问题的能力的有效方法之一。那么如何通过机器学习来解决问题呢&#xff1f; 本节将通过一个实例来一步一步地介绍一个回归问题。 本章主要介绍以下内容&#xff1a; 如何端到端地完成一个回归问题…

Ansible学习笔记8

group模块&#xff1a; 创建一个group组&#xff1a; [rootlocalhost ~]# ansible group1 -m group -a "nameaaa gid5000" 192.168.17.105 | CHANGED > {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}…

【Tkinter系列05/15】小部件(框架标签和列表)

续接上文&#xff1a;【Tkinter系列04/15】界面小部件&#xff08;选择钮、行编辑器&#xff09; 11. 小部件Frame 框架基本上只是其他小部件的容器。 应用程序的根窗口基本上是一个框架。 每个框架都有自己的网格布局&#xff0c;因此每个框架中小部件的网格化 框架独立工作…

ARP欺骗(大白话)

前提条件&#xff1a; 有三台主机&#xff0c;PC1&#xff0c;PC2&#xff0c;PC3&#xff0c;现要实现PC1与PC2的关联&#xff08;如图&#xff09; 不存在ARP欺骗时 步骤&#xff1a; 首先查看arp表&#xff08;有ip和mac的关系&#xff09; 如果表中有PC2的信息&#xf…

图像二值化

目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术&#xff0c;用于将图像转换为二值图像。在固定阈值二值化中&#xff0c;像素值根据一个预定义的阈值进行分类&#xff0c;大于阈值的…

使用kafka还在依赖Zookeeper,kraft模式了解下

Kafka的Kraft模式 概述 ​ Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。其核心组件包含Producer、Broker、Consumer&#xff0c;以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器…

2023年高教社杯数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

[USACO07DEC] Sightseeing Cows G(分数规划+负权回路判定)

题面 [USACO07DEC] Sightseeing Cows G - 洛谷 题目大意&#xff1a; 给出一张n点m边的带点权带边权的有向图 求一个回路使得路上点权和除以边权和最大&#xff08;最优比率回路&#xff09; 题解 首先一定仔细读题&#xff0c;是回路不是路径 由于回路上所有点权只能获取…

自动化运维:Ansible之playbook基于ROLES部署LNMP平台

目录 一、理论 1.playbook剧本 2.ROLES角色 3.关系 4.Roles模块搭建LNMP架构 二、实验 1.Roles模块搭建LNMP架构 三、问题 1.剧本启动php报错语法问题 2.剧本启动mysql报错语法问题 3.剧本启动nginx开启失败 4.剧本安装php失败 5.使用yum时报错 6.rpm -Uvh https…