Maven笔记(IDEA)

文章目录

      • 要点一 : Maven简介
        • 1.1 Maven的作用
        • 1.2 Maven安装
          • 方式一
          • 方式二
        • 1.3 Maven命令
      • 要点二 : Maven 核心概念
        • 2.1 项目的目录结构
        • 2.2 pom文件
        • 2.3 坐标
        • 2.4 依赖 dependency
        • 2.5 仓库
          • 仓库的分类:
          • 添加阿里云镜像源:
        • 2.6 maven 的生命周期,插件和命令
            • 单元测试(junit)
          • 命令
        • 2.7 自定义配置插件
      • 要点三 : Maven和idea的集成
        • 3.1 idea中集成maven
        • 3.2 创建基于maven的普通java项目
        • 3.3 创建Web项目
      • 要点四 : 依赖管理
      • 要点五 : 常用设置
        • 5.1 properties配置
        • 5.2 全局变量

要点一 : Maven简介

官网:http://maven.apache.org/

1.1 Maven的作用

1)项目的自动构建,帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作。
2)管理依赖(管理项目中使用的各种jar包)。
依赖:项目中需要使用的其他资源,常见的是jar。比如项目要使用mysql驱动。我们就说项目依赖mysql驱动。

1.2 Maven安装

地址: http://maven.apache.orgl 从中下载.zip文件。

方式一

1.确定JAVA_HOME指定jdk的安装目录,如果没有JAVA_HOME,需要在windows的环境变量中创建JAVA_HOME,它的值是jdk的安装目录
⒉解压缩apache-maven-3.6.3-bin.zip,把解压后的文件放到一个目录中。目录的路径不要有中文,不要有空格。
3.把maven安装目录中下的bin的路径添加到path中
4.测试maven的安装。在命令行执行mvn -v
在这里插入图片描述

方式二

1.确定JAVA_HOME是否有效
2在环境变量中,创建一个叫做M2_HOME (或者
MAVEN_HOME),它的值是maven的安装目录M2_HOME=D:\toolslapache-maven-3.3.9
3.在path环境变量中,加入%M2_HOME%\bin
4.测试maven的安装,在命令行执行mvh -v

两种方式本质上都是一样的,第二种更规范

1.3 Maven命令

mvn -v 					查看maven版本
mvn -compile 			编译
java	包名.文件名		执行某个java文件(在 项目名称\target\classes 执行命令)

要点二 : Maven 核心概念

Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从
Maven的九个核心概念入手,
看看Maven是如何实现自动化构建的
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合

2.1 项目的目录结构

maven项目有一个约定的目录结构

一个maven项目是一个文件夹,比如项目名为Star

Star  项目文件夹
	\src 
		\main        		主程序目录()
           \java			源代码
           \resources		配置文件
    	\test				放置测试代码
    		\java			测试代码(junit)
    		\resources		测试程序需要的配置文件
	\pom.xml				maven的配置文件

2.2 pom文件

即Project Object Model项目对象模型。
Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,
pom.xml是 Maven的灵魂。所以,maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。



<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.0modelVersion>

  <!--坐标->
  <groupId>com.stargroupId>
  <artifactId>ch01-maven-javaartifactId>
  <version>1.0version>

  
  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.8maven.compiler.source>
    <maven.compiler.target>1.8maven.compiler.target>
  properties>
project>

2.3 坐标

坐标组成是groupid, artifiactld, version。坐标概念来自数学。
坐标作用:确定资源的,是资源的唯一标识。在maven中,每个资源都是坐标。坐标值是唯一的。简称叫gav

	<groupId>com.stargroupId>
	<artifactId>ch01-maven-javaartifactId>
	<version>1.0version>
	
	<packaging>warpackaging>

groupId:组织名称,代码。公司,团体或者单位的标识。这个值常使用的公司域名的倒写。
	例如:学校的网站www.xuexiao.com,groupId: com.xuexiao
	
	如果项目规模比较大,也可以是域名倒写+大项目名称。
	例如:www.baidu.com ,无人车:com.baidu.appo1lo
	
artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。项目名称是唯一的。

version: 版本,项目的版本号,使用的数字。三位组成。例如 主版本号.次版本号.小版本号。
例如5.1.2
	注意:如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT

项目使用gav:
1.每个maven项目,都需要有一个自己的gav
2.管理依赖,需要使用其他的jar ,也需要使用gav作为标识。

maven仓库
https://mvnrepository.com/


2.4 依赖 dependency

依赖:项目中要使用的其他资源(jar)。
需要使用maven表示依赖,管理依赖。通过使用dependency和gav一起完成依赖的使用

需要在pom.xml文件中,使用dependencies和dependency,还有gav完成依赖的说明。

格式:

  <dependencies>
 	
    <dependency>
      <groupId>log4jgroupId>
      <artifactId>log4jartifactId>
      <version>1.2.17version>
    dependency>
	
	<dependency>
	    <groupId>mysqlgroupId>
	    <artifactId>mysql-connector-javaartifactId>
	    <version>5.1.16version>
	dependency>
  dependencies>

maven使用gav作为标识,从互联网下载依赖的jar。下载到你的本机上。由maven管理项目使用的这些jar

packaging项目打包的类到有jar , war , ear,pom等等默认是jar


2.5 仓库

仓库是存东西的,maven的仓库存放的是:
1.maven工具自己的jar包。
⒉第三方的其他jar,比如项目中要使用mysql驱动。
3.自己写的程序,可以打包为jar。存放到仓库。

仓库的分类:

1.本地仓库(本机仓库)∶位于你自己的计算机,它是磁盘中的某个目录。本地仓库:默认路径,是你登录操作系统的账号的目录中/.m2/repository

C : \Users\Star.m2\repository

修改本地仓库的位置:修改maven工具的配置文件(maven的安装路径\conflsetting.xml)步骤:
1)创建一个目录,作为仓库使用。目录不要有中文和空格。目录不要太深。
例如:E:\repo
2)修改setting.xml文件,指定E:\repo这个目录

<localRepository>E:\repolocalRepository>
添加阿里云镜像源:
<mirror>
  <id>alimavenid>
  <name>aliyun mavenname>
  <url>http://maven.aliyun.com/nexus/content/groups/public/url>
  <mirrorOf>centralmirrorOf>
mirror>

将以上内容放入settings.xml文件中的mirrors标签下

2.6 maven 的生命周期,插件和命令

maven的生命周期 : 项目构建的各个阶段。包括清理,编译,测试,报告,打包,安装,部署
插件 : 要完成构建项目的各个阶段,要使用maven的命令,执行命令的功能是通过插件完成的。插件就是jar,一些类。
命令 : 执行maven功能是由命令发出的。比如mncompile

单元测试(junit)

junit是一个单元测试的工具,在iava中经常使用。
单元:在java中指的是方法。一个方法就是一个单元,方法是测试的最小单位。
作用:使用junit去测试方法是否完成了要求。开发人员自测。

使用单元测试
1)加入junit的依赖

<dependency>
  <groupId>junitgroupId>
  <artifactId>junitartifactId>
  <version>4.11version>
  <scope>testscope>
dependency>

2)在src/test/java目录中创建测试类文件。写测试代码单元测试使用的建议:
1.测试类的定义,名称一般是Test+要测试的类名称
⒉.测试类它的包名和要测试的类包名一样。
3.在类中定义方法,要测试代码。
方法的定义: public方法,
没有返回值
方法名称自定义(建议Test+测试的方法名称)
方法没有参数
4.在测试类中的方法,可以单独执行。测试类也可以单独执行
5.在方法的上面加上@Test

import org.junit.Assert;
import org.junit.Test;
public class TestHelloMaven {
    @Test
    public void testAddNumber1(){
        System.out.println("testAddNumber1111111111111111");
        HelloMaven hello = new HelloMaven();
        int res  = hello.addNumber(10,20);
        Assert.assertEquals(30, res);
    }
    @Test
    public void testAddNumber2(){
        System.out.println("testAddNumber22222222222222222");
        HelloMaven hello = new HelloMaven();
        int res  = hello.addNumber(10,20);
        Assert.assertEquals(30, res);
    }
}
命令

注意:执行以下命令必须在命令行进入pom.xml所在目录!

  1. mvn clean:清理命令,作用删除以前生成的数据,删除target目录。
    插件: maven-clean-plugir,版本是2.5

  2. mwn compile:编译命令,执行的代码编译,把src/main/iava目录中的jaxa代码编译为class文件。同时把class文件拷贝到 target/classes目录。这个目录classes是存放类文件的根目录〈也叫做类路径,classpath)
    涉及的插件:
    maven-compiler-plugin版本3.1。编译代码的插件
    maven-resources-plugin版本2.6。资源插件,处理文件的。作用是把src/main/resources目录中的文件拷贝到target/classes目录中.

  3. mvn test-compile : 编译命令,编译src /test/iava目录中的源文件,把生成的class拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到test-clasess目录
    涉及的插件:
    maven-compiler-plugin版本3.1。编译代码的插件
    maven-resources-plugin版本2.6。资源插件,处理文件的

  4. mvn test : 测试命令,作用执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。
    涉及的插件: maven-surefire-plugin版本 2.12.4

  5. mvn package : 打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中,默认压缩文件是jar类型的。web应用是war类型,扩展是jar, war的。
    涉及的插件: maven-jar-plugin版本2.4。执行打包处理。生成一个jar扩展的文件,放在target目录下
    打包的文件包含的是 src/main目录中的所有的生成的class和配置文件和test无关。

    生成的是Test-1.0-SNARSHOT.jar

	<groupId>com.stargroupId>
	<artifactId>TestartifactId>
	<version>1.0-SNARSHOTversion>
	<packaging>jarpackaging>
	打包的文件名 : artifactId.1.0-SNARSHOT.packaging

6)mvn install:把生成的打包的文件,安装到maven仓库。
涉及的插件: maven-install-plugin版本2.4。把生成的jar文件安装到本地仓库。
查看查看中的jar文件:

	<groupId>com.stargroupId>
	<artifactId>TestartifactId>
	<version>1.0-SNARSHOTversion>
	<packaging>jarpackaging>
	
	groupId中的值,如果有“.”前和后都是独立的文件夹。com\star
	artifactId,独立的文件夹
	version,独立的文件夹

  1. mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中)。

一般来说打包时先clean再package mvn clean package

2.7 自定义配置插件

在pom.xml文件中, build标签中。设置插件


<build> 
	 <plugins>
	 	 
		 <plugin> 
			 <groupId>org.apache.maven.pluginsgroupId> 
			 <artifactId>maven-compiler-pluginartifactId> 
			 <version>3.8.1version> 
			 <configuration> 
				 <source>1.8source> 
				 <target>1.8target> 
			 configuration> 
		 plugin> 
	 plugins> 
build>

要点三 : Maven和idea的集成

3.1 idea中集成maven

  1. 选择File–>Setting
    Maven笔记(IDEA)_第1张图片
    设置项:

    -DarchetypeCatalog=internal
    

    Maven笔记(IDEA)_第2张图片
    Maven笔记(IDEA)_第3张图片

  2. 对新建的或是导入的项目也使用同样的maven设置
    Maven笔记(IDEA)_第4张图片
    然后和上面一样的设置
    Maven笔记(IDEA)_第5张图片
    设置项:

    -DarchetypeCatalog=internal
    

    Maven笔记(IDEA)_第6张图片

3.2 创建基于maven的普通java项目

Maven笔记(IDEA)_第7张图片

3.3 创建Web项目

Maven笔记(IDEA)_第8张图片
Maven笔记(IDEA)_第9张图片

要点四 : 依赖管理

依赖范围:使用scope表示依赖的范围。
依赖范围表示:这个依赖(jar和里面类)在项目构建的那个阶段起作用。
依赖范围scope :
	compile:默认,参与构建项目的所有阶段
	test:测试,在测试阶段使用,比如执行mvn test会使用junit 。
	provided:提供者。项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器这个依赖的jar包
					明显的是servlet 和jsp依赖

要点五 : 常用设置

5.1 properties配置

<properties>
 <maven.compiler.source>1.8maven.compiler.source> 源码编译 jdk 版本
 <maven.compiler.target>1.8maven.compiler.target> 运行代码的 jdk 版本
 <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding> 生成报告的编码
 properties>

5.2 全局变量

在properties定义标签,这个标签就是一个变量,标签的文本就是变量的值。
使用全局变量表示多个依赖使用的版本号。

使用步骤:
1.在properties标签中,定义一个标签,指定版本的值

<properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.8maven.compiler.source>
    <maven.compiler.target>1.8maven.compiler.target>
    
    <spring.version>4.3.10.RELEASEspring.version>
    <junit.version>4.11junit.version>
  properties>

2.使用全局变量,语法${变量名}

<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>

<dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>${junit.version}version>
      <scope>testscope>
    dependency>

3.使用资源插件
处理的配置文件的信息, maven默认处理配置文件
(1): maven会把src/main/resources目录中的文件,拷贝到target/classes目录下
(2): maven只处理src/main/iava目录中的.java文件,把这些java文件编译为class,拷贝到target/classes目录中。不处理其他文件。

<build>
	
	<resources>
		 <resource>
			 <directory>src/main/javadirectory>
			 <includes><!--包括目录下的.properties,.xml 文件都会扫描到- ->
				 <include>**/*.propertiesinclude>
				 <include>**/*.xmlinclude>
			 includes>
			 
			 <filtering>falsefiltering>
		 resource>
	 resources>
build>

你可能感兴趣的:(Maven,#,IDEA,maven,java,intellij-idea)