Maven是apache基金会的开源项目,使用java语言开发。
Maven可以把jar包所依赖的其他jar包自动下载并引入项目。
构建过程中的各个环节:清理,编译,测试,报告,打包,安装,部署
Maven的使用方式:
Maven可以独立使用:创建项目,编译代码,测试程序,打包,部署等等。
Maven也可以和idea一起使用:通过idea借助Maven来实现编译,测试,打包等等。
Hello 项目文件夹
\src
\main 叫做主程序目录(完成项目功能的代码和配置文件)
\java 源代码(包和相关的类定义)
\resource 配置文件
\test 放置测试程序代码的(开发人员自己写的测试代码)
\java 测试代码的(junit)
\resource 测试程序需要的配置文件
\pom.xml Maven的配置文件,核心文件
按照上面的目录创建相应的文件夹:

package com.powernode;
public class HelloMaven{
public int addNumber(int n1,int n2){
System.out.println("hello maven");
return n1+n2;
}
public static void main(String args[]){
HelloMaven hello=new HelloMaven();
int res=hello.addNumber(10,20);
System.out.println("在main方法中,执行hello的方法"+res);
}
}

在命令行输入:
mvn compile


POM:即Project Object Model 项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述。
<!-- project是根标签,后面是约束文件 -->
<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">
<!-- pom模型的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目的坐标 -->
<groupId>com.bjpowernode</groupId>
<artifactId>ch01-maven-java</artifactId>
<version>1.0</version>
<!-- maven的常用设置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- 依赖列表 -->
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 资源插件 -->
<resources>
<resource>
<directory>src/main/java</directory>
<!-- 所在的目录 -->
<includes>
<!-- 包括目录下的.properties,.xml 文件都会扫描到 -->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- filtering 选项 false 不启用过滤器, *.property 已经起到过
滤的作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
坐标组成:groupid,artifiactid,version。
坐标作用:确定资源的,是资源你的唯一标识。在maven中,每个资源都是坐标。坐标值是唯一的。简称叫gav。

<!-- 当前项目的坐标 -->
<groupId>com.bjpowernode</groupId>
<artifactId>ch01-maven-java</artifactId>
<version>1.0</version>
groupId:组织名称,代码。是公司,团体或者单位的标识。这个值常使用公司域名的倒写。artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。项目名称是唯一的。version:版本,项目的版本号,使用的数字。由三位组成。例如:主版本号.次版本号.小版本号。
项目使用gav:
1、每个maven项目,都需要有一个自己的gav。
2、管理依赖,需要使用其他的jar,也需要使用gav作为标识。

依赖:项目中要使用的其他资源(jar)。
需要使用maven表示依赖,管理依赖。通过使用dependency和gav一起完成依赖的使用。
需要在pom.xml文件中,使用dependencies和dependency,还有gav完成依赖的说明。
格式:表示我要找mysql项目的8.0.29版本的jar包。
<dependencies>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
<packaging>jar</packaging>//表示此项目最终生成的是jar文件
</dependency>
</dependencies>
maven的仓库存放的是:
仓库的分类:


<localRepository>D:/openrepository</localRepository>

在把这个路径下的文件都拷贝到我们自己创建的目录。

Maven的生命周期:项目构建的各个阶段。包括清理,编译,测试,报告,打包,安装,部署。
插件:要完成构建项目的各个阶段,要使用maven命令,执行命令的功能是通过插件完成的,插件就是jar,一些类。
命令:执行Maven的功能是由命令发出的。比如:mvn compile
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
src/test/java目录中创建测试类文件,写测试代码单元测试的建议:
【1】测试类的定义,名称一般是Test+要测试的类的名称
【2】测试类它的包名和要测试的类包名一样
【3】在类中定义方法,要测试的代码:
方法的定义:
【4】在测试类中的方法,可以单独执行,测试类也可以单独执行。
在pom.xml文件中加入下面代码
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

在如下目录创建java的测试文件:

package com.powernode;
import org.junit.Assert;
import org.junit.Test;
public class TestHelloMaven{
// 定义多个独立的测试方法,每个方法都是独立的
@Test
public void testAddNumber1(int n1,int n2){
System.out.println("执行了测试类testAddNumber");
HelloMaven hello=new HelloMaven();
int res=hello.addNumber(10,20);
//把计算结果res交给junit判断
//期望值,实际值
//断言类,判断两个结果是否相等,如果不等就会抛出异常。
Assert.assertEquals(30,res);
}
@Test
public void testAddNumber2(int n1,int n2){
System.out.println("执行了测试类testAddNumber");
HelloMaven hello=new HelloMaven();
int res=hello.addNumber(20,30);
//把计算结果res交给junit判断
//期望值,实际值
//断言类,判断两个结果是否相等,如果不等就会抛出异常。
Assert.assertEquals(50,res);
}
}
mvn clean:清理命令,作用是删除以前生成的数据,删除target目录。mvn compile:编译命令,执行的是代码的编译,把src/main/java目录中的java代码编译为class文件。同时把class文件拷贝到target/classes目录。这个目录classes是存放类文件的根目录。(也叫做类路径classpath)mvn test-compile:编译命令,编译src/main/java目录中的源文件,把生成的class文件拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到test-classes目录,同时把src/test/resources目录中的文件拷贝到test-classes目录mvn test:测试命令,执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。mvn package:打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中,默认压缩文件是jar类型,web应用是war类型的。mvn install:把生成的打包的文件,安装到maven仓库。idea有自带的maven,而我们要让idea使用我们自己安装的maven,这个过程叫做集成。



-DarchetypeCatalog=internal


首先创建一个空项目:

创建一个模块:


创建好项目了:







注:这里如果不把java变成绿色的文件夹那么就无法在test里面创建java的class。
idea maven项目的test目录下,无法直接创建class?

按上面四个序号创建package和class文件:做一个简单的加法测试
public class HelloMaven {
public int addNumber(int n1,int n2){
return n1+n2;
}
public static void main(String[] args) {
HelloMaven helloMaven=new HelloMaven();
int res=helloMaven.addNumber(10,20);
System.out.println("res="+res);
}
}
public class TestHelloMaven {
@Test
public void testAddNumber1(){
System.out.println("testAddNumber1~~~");
HelloMaven hello = new HelloMaven();
int res=hello.addNumber(10,20);
Assert.assertEquals(30,res);
}
@Test
public void testAddNumber2(){
System.out.println("testAddNumber2~~~");
HelloMaven hello = new HelloMaven();
int res=hello.addNumber(20,30);
Assert.assertEquals(50,res);
}
}

在界面的右侧:





