Maven学习笔记

目录

一、什么是Maven

二、maven下载和安装目录

1、安装目录解析

2、maven仓库

二、maven项目创建(Hello)

四、maven项目操作

五、创建HelloFriend

六、maven项目中pom.xml标签解释

1、坐标

2、依赖

(1)依赖的范围

(2)依赖传递

(3)依赖阻断

第一种true

第二种exclusion(暴力)

七、maven继承与聚合

1、继承

2、聚合


一、什么是Maven

Maven翻译为"专家","内行"

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

二、maven下载和安装目录

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

1、安装目录解析

bin:含有mvn运行的脚本

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

conf:含有settings.xml配置文件

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

2、maven仓库

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

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

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

二、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 {
	@Test
	public void testHello(){
		Hello hello = new Hello();
		String results = hello.sayHello("maven");
		assertEquals("Hello maven!",results);		
	}
}

四、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 {
	@Test
	public 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项目中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继承与聚合

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、聚合

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

相关推荐
6190083362 小时前
linux 安装jdk
java·linux·运维
懂得节能嘛.2 小时前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
专注于大数据技术栈2 小时前
Java中JDK、JRE、JVM概念
java·开发语言·jvm
YuanlongWang2 小时前
C# 基础——值类型与引用类型的本质区别
java·jvm·c#
Kay_Liang2 小时前
大语言模型如何精准调用函数—— Function Calling 系统笔记
java·大数据·spring boot·笔记·ai·langchain·tools
自由的疯3 小时前
Java 如何学习Docker
java·后端·架构
自由的疯3 小时前
Java Docker本地部署
java·后端·架构
007php0073 小时前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存
一勺菠萝丶3 小时前
在 macOS 上用 Docker 为 Java 后端 & 常见开发需求搭建完整服务(详尽教程)
java·macos·docker