Maven学习笔记

ops/2024/10/25 8:02:49/

目录

一、什么是Maven

maven%E4%B8%8B%E8%BD%BD%E5%92%8C%E5%AE%89%E8%A3%85%E7%9B%AE%E5%BD%95-toc" style="margin-left:0px;">二、maven下载和安装目录

1、安装目录解析

maven%E4%BB%93%E5%BA%93-toc" style="margin-left:80px;">2、maven仓库

maven%E9%A1%B9%E7%9B%AE%E5%88%9B%E5%BB%BA%EF%BC%88Hello%EF%BC%89-toc" style="margin-left:0px;">二、maven项目创建(Hello)

maven%E9%A1%B9%E7%9B%AE%E6%93%8D%E4%BD%9C-toc" style="margin-left:0px;">四、maven项目操作

五、创建HelloFriend

maven%E9%A1%B9%E7%9B%AE%E4%B8%ADpom.xml%E6%A0%87%E7%AD%BE%E8%A7%A3%E9%87%8A-toc" style="margin-left:0px;">六、maven项目中pom.xml标签解释

1、坐标

2、依赖

(1)依赖的范围

(2)依赖传递

(3)依赖阻断

第一种true

第二种exclusion(暴力)

maven%E7%BB%A7%E6%89%BF%E4%B8%8E%E8%81%9A%E5%90%88-toc" style="margin-left:0px;">七、maven继承与聚合

1、继承

2、聚合


一、什么是Maven

Maven翻译为“专家”,“内行”

Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

maven%E4%B8%8B%E8%BD%BD%E5%92%8C%E5%AE%89%E8%A3%85%E7%9B%AE%E5%BD%95">二、maven下载和安装目录

下载maven,配置环境变量,修改maven文件下config目录下的setting文件更改在第50行改中央仓库为d盘ripositoty,改镜像(默认为外国镜像下载较慢,可以更改为阿里云)。可以通过命令提示符检查maven版本信息。

1、安装目录解析

bin:含有mvn运行的脚本

boot:含有plexus-classworlds类加载器框架

conf:含有settings.xml配置文件

lib:含有Maven运行时所需要的java类库

maven%E4%BB%93%E5%BA%93" style="margin-left:0px;text-align:justify;">2、maven仓库

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

仓库的类型有:本地仓库(local)中央仓库(central)远程仓库(remote)

maven%E9%A1%B9%E7%9B%AE%E5%88%9B%E5%BB%BA%EF%BC%88Hello%EF%BC%89">二、maven项目创建(Hello)

Hello项目创建

项目Hello根目录建立pom.xml

java"><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>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><name>Hello</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		</dependencies>
</project>

Hello.java文件

java">package cn.tx.maven;
public class Hello {public String sayHello(String name){return "Hello "+name+"!";}
}

HelloTest.java文件

java">package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!",results);		}
}

maven%E9%A1%B9%E7%9B%AE%E6%93%8D%E4%BD%9C">四、maven项目操作

mvn compile编译(根目录产生target文件)

mvn clean(清理target文件)

mvn clean test(测试)

mvn package(打包,target目录下出现jar包)

mvn install(jar包引入本地库)

五、创建HelloFriend

建立pom.xml

java"><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>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		<dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>		</dependencies>
</project>

创建HelloFriend.java

java">package cn.tx.maven;import cn.tx.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}}

创建HelloFriendTest.java

java">package cn.tx.maven;import static junit.framework.Assert.assertEquals;import org.junit.Test;import cn.tx.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John",results);		}
}

在pom中,hellofriend引入了hello的依赖所以需要在maven仓库中有hello的jar包(进行install)。

maven%E9%A1%B9%E7%9B%AE%E4%B8%ADpom.xml%E6%A0%87%E7%AD%BE%E8%A7%A3%E9%87%8A">六、maven项目中pom.xml标签解释

以hellofriend为例

java"><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>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		<dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>		</dependencies>
</project>
  • groupId:组织标识,一般为:公司网址的反写+项目名
    artifactId:项目名称,一般为:项目名-模块名
    version:版本号 形式为0.0.1-SNAPSHOT:
            第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号
            SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本,GA -- 正式发布
    packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...
    clissifier:用来帮助定义构件输出的一些附属构件。

1、坐标

在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupId、artifactId、version、packaging、classifier。上述5个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的 ( 默认为 jar )。

2、依赖

<dependencies>所有依赖

<dependencie>依赖项

scope: 控制该依赖包在什么情况下会被加到 classpath 中;

(1)依赖的范围

共 6 种 scope,包括:compileprovidedruntimetest、system、import。例如上图的junit,只在测试中使用,则选择test即可,默认为compile

Compile:编译依赖范围。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效。

Test:测试依赖范围。只对测试classpath有效,编译主代码或运行项目时无法使用此依赖。典型例子如junit。

Provided:已提供依赖范围。其对于编译与测试classpath有效,运行时无效。如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。并且在打war包时,此范围的依赖不会打在WEB-INF/lib下。

Runtime:运行时依赖范围。与provided相对,运行时classpath有效。典型例子如jdbc编写是接口规范运行是提供具体实现类需要jar包)。

(2)依赖传递

创建MakeFriend

第一直接依赖:   HelloFriend项目依赖Hello项目 
第二直接依赖:   MakeFriend项目依赖HelloFriend项目

注意:依赖传递有范围

(3)依赖阻断
第一种<optional>true</optional>

在HelloFriend中写入代码,然后将其install到本地库,MakeFriend就会依赖于HelloFriend但不会依赖于Hello。

第二种exclusion(暴力)

直接在MakeFriend中写入exclusion

maven%E7%BB%A7%E6%89%BF%E4%B8%8E%E8%81%9A%E5%90%88" style="margin-left:0cm;">七、maven继承与聚合

1、继承

创建好父项目后右键新建module,创建子项目继承父项目

可以继承的pom元素

groupId :项目组 ID ,项目坐标的核心元素;
version :项目版本,项目坐标的核心元素;
description :项目的描述信息;
organization :项目的组织信息;
inceptionYear :项目的创始年份;
url :项目的 url 地址
develoers :项目的开发者信息;
contributors :项目的贡献者信息;
distributionManagerment :项目的部署信息;
issueManagement :缺陷跟踪系统信息;
ciManagement :项目的持续继承信息;
scm :项目的版本控制信息;
mailingListserv :项目的邮件列表信息;
properties :自定义的 Maven 属性;
dependencies :项目的依赖配置;
dependencyManagement :醒目的依赖管理配置;
repositories :项目的仓库配置;
build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;
reporting :包括项目的报告输出目录配置、报告插件配置等。

2、聚合

一个父项目可以创建多个子项目


http://www.ppmy.cn/ops/128276.html

相关文章

Java最全面试题->Java主流框架->Zuukeeper面试题

文章目录 ZuukeeperZooKeeper是什么?ZooKeeper和dubbo的区别?Zookeeper的java客户端都有哪些?ZooKeeper提供了什么?说说ZooKeeper文件系统说说ZAB协议?Znode有哪些类型?Zookeeper节点宕机如何处理?Zookeeper有哪几种几种部署模式?Zookeeper的典型应用场景?说一下Zooke…

开启RefCell debug_refcell feature查看借用冲突位置

文章目录 背景分析解决方法 本文解决两个问题&#xff1a; 开启rust源码库中的feature开启debug_refcell feature的方法查看 borrow 借用冲突的位置 背景 使用 RefCell 来实现内部可变性是在 Rust 开发中常用的方式&#xff0c;但是当逻辑复杂起来&#xff0c;常常会有可变借…

C++(面向对象、封装性、构造函数)

面向对象 三大特征&#xff1a;封装、继承、多态 C中的class是从C的struct扩展来的&#xff0c;两者的区别是默认访问权限不同。 struct的默认访问权限是公有的public class默认访问权限是私有的private 访问权限 类的内部派生类&#xff08;子类&#xff09…

RK3568开发板(debain系统)与Ubuntu使用nfs共享文件

VMware虚拟机 Ubuntu18.04 【网络配置陈桥接模式】 RK3568开发板【我是用讯为的RK3568】 网线连接路由器或者和电脑直连&#xff08;J13网口&#xff09; 1、Ubuntu上nfs服务器安装 1.1、命令如下&#xff1a; sudo apt-get update sudo apt-get install nfs-kernel-server1…

缓存预取文章比较分析

这篇文章主要记录调研的cache prefetch部分有价值的论文&#xff0c;并给出一些总结 Baleen 核心内容 ML learning-based admission policy prefetch.exploit a new cache residency model to guide model training. 首先对 access pattern 进行了统计分析&#xff0c;提取…

【火山引擎】语音识别 |流式语音识别 | python

目录 一 准备工作 二 流式语音识别 三 实践 模型广场:账号登录-火山引擎

软考——计算机网络概论

文章目录 &#x1f550;计算机网络分类1️⃣通信子网和资源子网2️⃣网络拓扑结构3️⃣ 计算机网络分类3&#xff1a;LAN MAN WAN4️⃣其他分类方式 &#x1f551;OSI 和 TCP/IP 参考模型1️⃣OSI2️⃣TCP/IP&#x1f534;TCP/IP 参考模型对应协议 3️⃣OSI 和 TCP/IP 模型对应…

CSP-S 信心赛 飚速布 题解

飚速布 2024.10.24 T4 题意 n n n 个数 a 1 , a 2 , a 3 , … , a n a_1, a_2, a_3, \dots, a_n a1​,a2​,a3​,…,an​。有 m m m 轮操作&#xff0c;第 i i i 轮操作选择恰好 k k k 个数使它 1 1 1。 设 U [ 1 , n ] ∩ N U [1, n] \cap \mathbb{N} U[1,n]∩N&a…