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

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

相关推荐
AIGC绘画2 分钟前
Spring微服务概述之spring cloud alibaba服务调用实践
java·spring·微服务
wwangxu3 分钟前
Java 面向对象基础
java·开发语言
uzong20 分钟前
JDK高性能套路: 自旋(for(;;)) + CAS
java·后端
带刺的坐椅1 小时前
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
java·spring·solon·spi
冷眼看人间恩怨1 小时前
【Java】揭秘网络编程:深入探索其无尽奥秘与魅力
java·开发语言·tcp/ip·udp·tcp
Algorithm15762 小时前
JVM是什么,与Java的关系是什么,以及JVM怎么实现的跨平台性
java·开发语言·jvm
遇见你真好。3 小时前
SpringBoot整合quartz定时任务
java·springboot·quartz
一颗甜苞谷3 小时前
开源一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码
java·开发语言·开源
攻心的子乐3 小时前
idea使用svn
java·ide·intellij-idea
程序员大佬超3 小时前
IDEA解决 properties 文件乱码问题
java·ide·intellij-idea