Maven基础入门

MAVEN 入门

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理.

  • 教程参考: https://www.imooc.com/learn/443
  • 笔记参考: https://blog.csdn.net/qq_44850489/article/details/106742812
  • Maven仓库坐标查询: https://mvnrepository.com/

1. 安装

  1. 进入maven管网,下载想用的maven版本.

  2. 系统变量中新建:环境变量名:M2_HOME 变量值:指向刚刚下载文件的安装目录

  3. 修改系统变量中的path: 在最后加入 ;%M2_HOME%/bin

  4. 验证是否成功:打开命令提示符 输入mvn -v出现版本信息就是安装完成

  5. 修改本地仓库路径: 打开maven安装目录 %M_2HOME%/conf/settings.xml 修改localRepository标签

    <localRepository>D:/Respository/LocalRespository</localRepository>

  6. 设置镜像在%M_2HOME%/conf/settings.xml 修改<mirrors>标签内容

  7. <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror> 
    

2. 新建maven项目

  1. 建立maven约定好的文件目录结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLVTNT1n-1600497503169)(C:\Users\x00580500\Documents\笔记图片\maven目录结构.PNG)]

  2. 编写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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.imooc.maven01</groupId>
  <artifactId>maven01-model</artifactId>
  <version>0.0.1SNAPSHOT</version>

  <dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
	</dependency>
  </dependencies>
</project>

其中

<groupId></groupId> 	//这个的值就是项目名
<artifactId></artifactId>  //这个的值是模块名
<version></version> 	//这个是版本

<!--[依赖组]-->
<dependencies>
     <!--[单个依赖]-->
     <dependency>
         <groupId> junit </groupId>
         <artifactId>junit</artifactId>
		<version>4.10</version>
	</dependency>
 </dependencies>
  1. 新建src\test\java\com\imooc\maven01\model\HelloWorldTest.java 文件
package com.imooc.maven01.model;
import org.junit.*;
import org.junit.Assert.*;
public class HelloWorldTest{
	@TestTest
	public void testHello(){
		Assert.assertEquals("Hello World",new HelloWorld().sayHello());
	}
}
  1. 新建src\main\java\com\imooc\maven01\model\HelloWorld.java 文件
package com.imooc.maven01.model;

public class HelloWorld{
    public String sayHello(){
        return "Hello World";
    }
}
  1. 打开命令行 cd到项目的根目录下 然后输入:mvn compile 。对项目进行编译

  2. 测试是否ok : 在项目根目录下输入 mvn test

  3. 打包项目的方法: cd到文件根目录中 输入: mvn package

  4. target 文件夹中生成了项目 的编译文件和 jar包

3. maven常用命令

  • mvn -v 查看maven版本
  • mvn compile编译当前项目至taget文件夹

当compile编译时,用到依赖包就去pom.xml中查找,找到后去本地仓库中查找,放到项目中,如果没有就去maven的中央仓库中查找下载到本地仓库,然后引用。

  • mvn test 运行当前项目测试类
  • mvn package 将当前项目打包至taget文件夹
  • mvn clean 删除target目录,如自解码文件和测试报告
  • mvn install 将本项目编译的jar包安装到本地仓库中

在其它项目引入时需要在pom.xml中指定坐标

<dependency>
		<groupId>com.imooc.maven01</groupId>
		<artifactId>maven01-model</artifactId>
		<version>0.0.1SNAPSHOT</version>
</dependency>

4. maven自动创建目录骨架

使用archetype插件

mvn archetype:generate (第一次加载依赖会很慢)

版本选1.1

Define value for property 'groupId': 						com.imooc.maven03     	//组织名,公司网站的反写+项目名
Define value for property 'artifactId': 					maven03-service			//项目名-模块名		
Define value for property 'version' 1.0-SNAPSHOT: : 		1.0.0SNAPSHOT			//版本号
Define value for property 'package' com.imooc.maven03: : 	com.imooc.maven03.service	//代码所在的包名

或者

mvn archetype:generate -DgroupId=com.imooc.maven03 -DartifactId=maven03-service -Dversion=1.0.0SNAPSHOT 
-Dpackage=com.imooc.maven03.service

5. 坐标和仓库

坐标:在maven中每一个插件都可以成为构件 ,每个构件的位置就是坐标(地址)
下面这个被称为基本坐标

<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>

本地仓库和远程仓库
maven的lib目录下的 maven-model-builder jar包里面的pom-4.0.xml 是超级pom,所有的maven项目都会继承这个pom.xml

里面有个url就是maven的中央仓库地址

镜像仓库:中央仓库都是位于国外的,有时访问会出现问题。而镜像仓库就是位于国内的中央仓库

在标签中添加标签 中*表示对所有仓库进行换源

<mirror>
      <id>central</id>
      <mirrorOf>*</mirrorOf>
      <name>Private Public Nexus Mirror.</name>
      <!-- http://rnd-itlab.huawei.com:8081/nexus/content/groups/public/ -->
        <url>http://w3cloudnkg-sit1.huawei.com/ccloud/nexus/content/groups/public/</url>    
</mirror>

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
<mirror>

6. IDEA集成maven

File > New > Project > Maven > Create from archetype > maven-archetype-quickstart

在右侧集成Maven可视化工具

7. maven生命周期

maven包含三个生命周期

  • clean 清理项目
  • default 构建项目
  • site 生成项目站点

clean; compile; test; package; install

同一个生命周期中执行后面阶段时会自动执行其前置阶段

clean 清理项目
	pre-clean 执行清理前的工作
	clean 清理上一次构建生成的所有文件
	post-clean 执行清理后的文件
	
default	构建项目
	compile>test>package>install
	
site 生成项目站点
	pre-site
	site 生成项目的站点文档
	post-site
	site-deploy 发布生成的站点到服务器上

8. maven常用元素介绍

常用元素

<project> 约束信息
<modelVersion> 指定当前pom的版本
<groupId>       com.imooc.maven03     	//组织名,公司网站的反写+项目名
<artifactId>    maven03-service			//项目名-模块名		
<version> 	    1.0.0SNAPSHOT			//版本号 大版本号+分支版本号+小版本号   snapshot快照 alpha内部测试 beta公测 release稳定 GA正式发布
<package>   	com.imooc.maven03.service	//代码所在的包名
<packaging>  		//默认是jar 也可设置成 war zip pom
<name> 			项目描述名
<url>			项目地址
<description>	项目描述
<developers>
<orgnization>

<dependencies>
	<dependency>
		<groupId>
		<artifactId>
		<version>
		<type>
		<scope>
		<optional>设置依赖是否可选
		<exclusions>排除依赖传递列表
			<exclusion>

<dependencyManagement>
	<dependencies>
		<dependency>s
<build>
	<plugins> 插件列表
		<plugin>
			<groupId>
			<artifactId>
			<version>
<parent> 对父模块的继承
<modules> 指定多个模块进行编译
	<module>

9. maven 依赖范围

标签可用来指定依赖生效范围

compile : 默认范围 编译测试运行都有效

provided : 测试编译有效

runtime: 测试和运行有效

test: 测试范围有效

system: 编译和测试有效 与本机系统相关联 难移植

import: 导入的范围 只使用在dependencyManagement中 表示从其他的pom中导入dependecy的配置

三种classpath

1, 编译

2, 测试

3, 运行

10. 设置maven默认jre依赖

conf>settings.xml

<profile>
		<id>jdk-1.8</id>
		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>1.8</jdk>
		</activation>
		<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
	</profile>

11. 依赖冲突

当同时依赖了同一个jar包的不同版本,发生依赖冲突

  1. 短路优先
A->B->C->X

A->D->X(优先)
  1. 路径相同时 先声明的优先引入

12. 聚合和继承

12.1 聚合

当有多个maven项目需要同时用maven管理时,

可新建一个项目, aggeration ,让他将bge, nage, shanji一起编译发布.需要将的jar改为pom.

  <groupId>com.imooc.maven01</groupId>
  <artifactId>maven01-model</artifactId>
  <version>0.0.1SNAPSHOT</version>
  <packaging>pom</packaging>

并且在pom.xml中的标签中添加项目

当编译时 依次对标签中的项目编译打包

<modules>
	<module>../hongxing-bge</module>
	<module>../hongxing-nage</module>
	<module>../hongxing-shanji</module>
</modules>

当编译时 依次对以上项目编译打包

12.2 继承

像JAVA一样.我们可以将项目中相同的部分提取出来,放到一个新建的父类中

(eg. 当多个项目同时依赖相同的jar包时)

新建parent父类maven项目 并将每个项目都含有的junit放入其中,父类项目不会加载此jar包依赖, 版本号可以定义至标签中后续使用${属性名}方式引用.也需要将父类的改为pom

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
</properties>

<dependencyManagement>
  <dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>${junit.version}</version>
	</dependency>
  </dependencies>
</dependencyManagement>

子类修改

1. 继承的依赖删除版本号(version)标签和范围(scope)标签
2. 在<parent>标签中引入父类坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值