Maven常用命令总结
Maven是什么?
Maven,是一款由Apache组织开发,开源的、跨平台的项目管理工具。Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
准备工作
- JDK配置
不仅是Java项目的开发需要JDK的支持,Maven项目的运行也需要JDK的支持。因此需要先进行环境的配置—JDK。
查操作系统位数。在cmd终端窗口中,输入systeminfo命令,可以查询电脑的系统信息。(如系统类型:x64-based PC表明操作系统位数为64)。
下载相应版本的JDK。根据操作系统位数,到ORACLE官网去下载。
我的操作系统位数为64位,接受证书后(选中Accept License Agreement),就应该选择JDK版本:jdk-8u172-windows-x64.exe
添加JDK环境变量。具体配置如下:
先将下载好的JDK包放在一个便于以后管理的目录(F:\Java\jdk8)
依次选择:(计算机 ---> 系统属性 ---> 高级系统设置 ---> 环境变量 ---> 系统变量) 中
(新建变量)JAVA_HOME:F:\Java\jdk8
(新建变量)CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
(在最前面插入)PATH:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
注:
JAVA_HOME:运行一个命令时,会先检测当前目录下的可执行文件或脚本。如果找不到,会再去系统变量PATH中找。将变量JAVA_HOME加入PATH后,运行或开发一个Java程序时,能从PATH中找到其必须的环境配置JDK。
CLASSPATH:指定的是JDK中第三方jar包存放的位置。
测试JDK是否配置成功。在cmd终端窗口,输入java -version命令,如果能正确显示java的版本信息,说明JDK配置成功。
- MAVEN配置
从官网下载Maven的压缩包。在官网地址中选择下载(apache-maven-3.5.0-bin.tar.gz)
添加Maven环境变量。
先将解压后的maven包放在一个便于以后管理的目录(F:\maven\apache-maven-3.5.0)
依次选择:(计算机 ---> 系统属性 ---> 高级系统设置 ---> 环境变量 ---> 系统变量) 中
(新建变量)M2_HOME:F:\maven\apache-maven-3.5.0
(在最前面插入)PATH:%M2_HOME%\bin;
测试MAVEN是否配置成功。在cmd终端窗口,输入mvn -version命令,如果能正确显示java的版本信息,说明JDK配置成功。
在IDEA中新建一个Maven项目
1. 指定项目的SDK
SDK即开发环境。选择JDK所在目录(F:\Java\jdk8)即可。
2. 指定项目名称
这里的GroupId一般是公司域名。ArtifactId是在该组中确定该项目的唯一Id,也就是项目名称。Version就是该项目的版本。
这里的Project name就是项目名称,为了增加可读性一般与ArtifactId命名一致。Project Location就是新建的项目存放的地址。
3. 项目结构展示
src/main/java就是maven管理项目的默认目录。groupId-artifactId定位就是com.netopstec.learnMaven(刚刚手动新建的目录)。
4. 新建一个测试用的java类
新建一个类FirstMavenProject.java,类中有一个方法saySomething()。实际代码如下:
package com.netopstec.learnMaven;
/**
* @author zhenye 2018/4/28
*/
public class FirstMavenProject {
public String saySomething () {
return "This is my first maven project!";
}
public static void main(String[] args) {
System.out.println(new FirstMavenProject().saySomething());
}
}
IDEA对maven的支持
1. maven插件
IDEA默认集成了maven插件。利用maven插件,我们可以简单地对项目进行打包,测试等等。但我们需要知其然,知其所以然。也就是我们需要理解工具中Plugins的按钮实际是执行了哪些maven命令。
IDEA中的maven插件如下图所示:
2. 添加测试文件
新建一个测试文件FirstMavenProjectTest.java,实际代码如下:
import com.netopstec.learnMaven.FirstMavenProject;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author zhenye 2018/4/28
*/
public class FirstMavenProjectTest {
@Test
public void testDoSomething(){
FirstMavenProject project = new FirstMavenProject();
String result = project.saySomething();
assertEquals("This is my first maven project!",result);
}
}
一个单元测设方法主要有两个要求:1.方法加注解@Test;2.方法返回值为void。用组合快捷键(Alt + Enter),我们可以选择将进行单元测试必须的依赖导入pom.xml文件中。导入成功后pom文件如下图所示:
maven常用命令及其作用
IDEA中有自带的Terminal终端工具,我们可以在里面根据实际需求键入相应的mvn命令。
mvn clean test命令
这个命令,是执行所有的单元测试方法。执行结果如下(BUILD SUCCESS),说明测试通过。
详细的日志信息如下:
F:\workspace\learnMaven>mvn clean test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building learnMaven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ learnMaven ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ learnMaven ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ learnMaven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to F:\workspace\learnMaven\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ learnMaven ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory F:\workspace\learnMaven\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ learnMaven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to F:\workspace\learnMaven\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ learnMaven ---
[INFO] Surefire report directory: F:\workspace\learnMaven\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running FirstMavenProjectTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.049 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.451 s
[INFO] Finished at: 2018-04-28T17:26:24+08:00
[INFO] Final Memory: 15M/211M
[INFO] ------------------------------------------------------------------------
F:\workspace\learnMaven>
从日志信息我们可以看到,mvn clean test命令的作用:
- 先清理缓存: maven-clean-plugin:2.5:clean (default-clean) @ learnMaven
- 加载主程序src需要的资源: maven-resources-plugin:2.6:resources (default-resources) @ learnMaven
- 编译learnMaven项目: maven-compiler-plugin:3.1:compile (default-compile) @ learnMaven
- 加载测试程序test需要的资源: maven-resources-plugin:2.6:testResources (default-testResources) @ learnMaven
- 编译测试程序—@test注解标注的方法: maven-compiler-plugin:3.1:testCompile (default-testCompile) @ learnMaven
- 执行test目录下的所有测试方法: maven-surefire-plugin:2.12.4:test (default-test) @ learnMaven
执行完上述命令后,我们会发现在项目中多了一个目录target。这个目录中的目录结构跟该命令实际执行的命令相吻合。
mvn clean package命令
这是一个打包命令。执行完该命令后,我们会发现,在target目录中又多了一个文件(learnMaven-1.0-SNAPSHOT.jar)。也就是说,这个命令会将整个learnMaven项目压缩成一个文件,但是别的项目无法之间引用这个包。。打开lib文件夹(第三方jar包的文件库),我们发现有很多类似名称的的文件夹,其实我们现在生成的jar包,已经跟这些jar是一样的了。
从日志信息我们可以看到,mvn clean package命令的作用:
- 会执行mvn clean test命令中1-6步,即所有命令。
- 打成jar包: maven-jar-plugin:2.4:jar (default-jar) @ learnMaven
mvn clean install命令
从日志信息我们可以看到,mvn clean install
- 会执行mvn clean test命令中1-6步,即所有命令。
- 打成jar包: maven-jar-plugin:2.4:jar (default-jar) @ learnMaven
- 加入本地仓库,其他项目可以引用: maven-install-plugin:2.4:install (default-install) @ learnMaven
到日志显示的目录下去找该文件,发现确实多了两个文件。也就是把这两个文件加入了本地仓库中。如下图所示:
运行jar文件
(learnMaven-1.0-SNAPSHOT.jar),是一个jar文件,我们通过java命令直接运行该文件,会报错如下:
由于这个项目里面有一个main方法,该方法无法加入打包后的文件。如果我们需要运行main方法,可以通过如下命令:
# 告诉maven工具,main方法在哪儿
mvn exec:java -Dexec.mainClass="com.netopstec.learnMaven.FirstMavenProject"
效果图如下:
当然,我们更应该关注的是maven如何管理我们的项目,而不是本身这个项目该怎么去运行。