Maven使用入门

Posted 斐波那切

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven使用入门相关的知识,希望对你有一定的参考价值。

Maven是Java中开发流行的项目管理工具,其他同类产品还有ant(见过工厂制造执行系统MES中使用ant打包)和gradle(Spring源码使用的gradle管理),目前来说maven是最广泛使用的,下面简单记录一下。

Maven安装和配置

maven可以管理项目的生命周期,包括编译、测试、打包,发布、部署的整个过程,其安装过程非常方便,下面是window下的安装方式。

(1)官网下载maven,地址:http://maven.apache.org/download.cgi,目前最新已经支持3.6.2,如果是下载3.6版本以上的maven,需要保证至少JDK8的版本,并且环境变量保证JAVE_HOME指向jdk正确的安装目录,maven启动后会读取这个变量,如果没有配置JAVA_HOME,启动会出现问题。

# maven启动bat文件中需要读取JAVA_HOME变量
@REM ==== START VALIDATION ==== if not "%JAVA_HOME%"=="" goto OkJHome for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i" goto checkJCmd :OkJHome set "JAVACMD=%JAVA_HOME%\\bin\\java.exe"

(2)下载完成后解压安装包即可,开始配置Maven环境变量,注意安装目录中不要有中文或空格。

添加MAVEN_HOME变量名和变量值,变量值就是maven目录,根据具体路径配置即可。

将MAVEN_HOME添加到path环境变量,将%MAVEN_HOME%\\bin;添加到末尾。

如果是linux,配置类似,修改/etc/profile文件即可,export MAVEN_HOME=\'maven安装目录\',然后export $MAVEN_HOME/bin:$PATH即可。 

(3)安装完成后进入CMD命令窗口执行mvn -v命令,如果能看到提示版本信息,说明安装成功。

(4)conf/setting.xml中配置maven本地库和镜像库,本地库就是保存在本机的jar包资源的集合,镜像库是保存在远程的,镜像库可以选择有名的私服或者maven中央仓库。由于中央仓库在美国,下载依赖很慢,因此一般选择国内阿里云或网易私服镜像。

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

<!--本地库如果不配置就默认在用户家目录/.m2/repository,一般在c盘,最好修改不要放到c盘-->
<localRepository>本地库路径</localRepository> ...省略 <mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. | <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> -->

<!--配置阿里云镜像-->
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

</mirrors>

到此为止,就完成了maven的安装配置,接下来可以使用maven了,如通过pom.xml文件的配置,让maven帮忙下载jar包。

常用命令

(1)可以使用交互式方式创建项目project,在window目录下敲击cmd,直接进入当前目录cmd窗口,使用mvn archetype:generate命令创建项目,也可以使用非交互式的方式直接创建,最后说明。

 # 创建项目过程
1
D:\\mvnProject>mvn archetype:generate #回车 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] ------------------< org.apache.maven:standalone-pom >------------------- 5 [INFO] Building Maven Stub Project (No POM) 1 6 [INFO] --------------------------------[ pom ]--------------------------------- 7 [INFO] 8 [INFO] >>> maven-archetype-plugin:3.1.0:generate (default-cli) > generate-source 9 s @ standalone-pom >>> 10 [INFO] 11 [INFO] <<< maven-archetype-plugin:3.1.0:generate (default-cli) < generate-source 12 s @ standalone-pom <<< 13 [INFO] 14 [INFO] 15 [INFO] --- maven-archetype-plugin:3.1.0:generate (default-cli) @ standalone-pom 16 --- 17 [INFO] Generating project in Interactive mode # 提示创建模式为交互式 18 [WARNING] No archetype found in remote catalog. Defaulting to internal catalog 19 [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven. 20 archetypes:maven-archetype-quickstart:1.0) 21 Choose archetype:
# 提示可以选择的archetype,一共10种,如果不选择默认是7
22 1: internal -> org.apache.maven.archetypes:maven-archetype-archetype (An archety 23 pe which contains a sample archetype.) 24 2: internal -> org.apache.maven.archetypes:maven-archetype-j2ee-simple (An arche 25 type which contains a simplifed sample J2EE application.) 26 3: internal -> org.apache.maven.archetypes:maven-archetype-plugin (An archetype 27 which contains a sample Maven plugin.) 28 4: internal -> org.apache.maven.archetypes:maven-archetype-plugin-site (An arche 29 type which contains a sample Maven plugin site. 30 This archetype can be layered upon an existing Maven plugin project.) 31 5: internal -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype 32 which contains a sample JSR-268 Portlet.) 33 6: internal -> org.apache.maven.archetypes:maven-archetype-profiles ()
# 普通maven工程选择7
34 7: internal -> org.apache.maven.archetypes:maven-archetype-quickstart (An archet 35 ype which contains a sample Maven project.) 36 8: internal -> org.apache.maven.archetypes:maven-archetype-site (An archetype wh 37 ich contains a sample Maven site which demonstrates 38 some of the supported document types like APT, XDoc, and FML and demonstra 39 tes how 40 to i18n your site. This archetype can be layered upon an existing Maven pr 41 oject.) 42 9: internal -> org.apache.maven.archetypes:maven-archetype-site-simple (An arche 43 type which contains a sample Maven site.)
# web工程选择10
44 10: internal -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype 45 which contains a sample Maven Webapp project.) 46 Choose a number or apply filter (format: [groupId:]artifactId, case sensitive co 47 ntains): 7: 7 # 选择7 48 Define value for property \'groupId\': com.boe #groupId一般为公司的域名倒写 49 Define value for property \'artifactId\': mvntest #artifactId一般为项目名 50 Define value for property \'version\' 1.0-SNAPSHOT: : #首次建立默认为snapshot,代表还在开发中,其他还有RELEASE(发布)和LATEST(最新) 51 Define value for property \'package\' com.boe: : #输入包名,默认和groupId一样
# 最后确认配置,确认选Y
52 Confirm properties configuration: 53 groupId: com.boe 54 artifactId: mvntest 55 version: 1.0-SNAPSHOT 56 package: com.boe 57 Y: : Y
# 打印日志,提示创建项目成功
58 [INFO] ------------------------------------------------------------------------- 59 --- 60 [INFO] Using following parameters for creating project from Old (1.x) Archetype: 61 maven-archetype-quickstart:1.1 62 [INFO] ------------------------------------------------------------------------- 63 --- 64 [INFO] Parameter: basedir, Value: D:\\mvnProject 65 [INFO] Parameter: package, Value: com.boe 66 [INFO] Parameter: groupId, Value: com.boe 67 [INFO] Parameter: artifactId, Value: mvntest 68 [INFO] Parameter: packageName, Value: com.boe 69 [INFO] Parameter: version, Value: 1.0-SNAPSHOT 70 [INFO] project created from Old (1.x) Archetype in dir: D:\\mvnProject\\mvntest 71 [INFO] ------------------------------------------------------------------------ 72 [INFO] BUILD SUCCESS 73 [INFO] ------------------------------------------------------------------------ 74 [INFO] Total time: 01:27 min 75 [INFO] Finished at: 2019-11-09T15:43:17+08:00 76 [INFO] ------------------------------------------------------------------------

这样就完成了项目的创建,可以去目录下查看发现有了新的项目,但是只有main和test代码目录,没有resources目录,需要手动添加。

除了使用交互式方式,还可以使用非交互式的方式创建工程。

 # 非交互方式,一行指定groupId,artifactId,package,还有构建骨架类型archetype等
1
D:\\mvnProject>mvn archetype:generate -DgroupId=com.boe -DartifactId=mvntest1 - 2 Dpackage=com.boe.mvntest1 -DarchetypeArtifactId=maven-archetype-webapp -Dvers 3 ion=1.0 -DinteractiveMode=No; 4 [INFO] Scanning for projects... 5 [INFO] 6 [INFO] ------------------< org.apache.maven:standalone-pom >------------------- 7 [INFO] Building Maven Stub Project (No POM) 1 8 [INFO] --------------------------------[ pom ]--------------------------------- 9 [INFO] 10 [INFO] >>> maven-archetype-plugin:3.1.0:generate (default-cli) > generate-source 11 s @ standalone-pom >>> 12 [INFO] 13 [INFO] <<< maven-archetype-plugin:3.1.0:generate (default-cli) < generate-source 14 s @ standalone-pom <<< 15 [INFO] 16 [INFO] 17 [INFO] --- maven-archetype-plugin:3.1.0:generate (default-cli) @ standalone-pom 18 ---
# 提示为批处理模式 19 [INFO] Generating project in Batch mode 20 [WARNING] No archetype found in remote catalog. Defaulting to internal catalog 21 Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/publ 22 ic/org/apache/maven/archetypes/maven-archetype-bundles/2/maven-archetype-bundles 23 -2.pom 24 Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/publi 25 c/org/apache/maven/archetypes/maven-archetype-bundles/2/maven-archetype-bundles- 26 2.pom (1.5 kB at 1.3 kB/s) 27 Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/publ 28 ic/org/apache/maven/archetype/maven-archetype-parent/1/maven-archetype-parent-1. 29 pom 30 Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/publi 31 c/org/apache/maven/archetype/maven-archetype-parent/1/maven-archetype-parent-1.p 32 om (1.3 kB at 3.5 kB/s)
# 提示创建成功
33 [INFO] ------------------------------------------------------------------------- 34 --- 35 [INFO] Using following parameters for creating project from Old (1.x) Archetype: 36 maven-archetype-webapp:1.0 37 [INFO] ------------------------------------------------------------------------- 38 --- 39 [INFO] Parameter: basedir, Value: D:\\mvnProject 40 [INFO] Parameter: package, Value: com.boe.mvntest1 41 [INFO] Parameter: groupId, Value: com.boe 42 [INFO] Parameter: artifactId, Value: mvntest1 43 [INFO] Parameter: packageName, Value: com.boe.mvntest1 44 [INFO] Parameter: version, Value: 1.0 45 [INFO] project created from Old (1.x) Archetype in dir: D:\\mvnProject\\mvntest1 46 [INFO] ------------------------------------------------------------------------ 47 [INFO] BUILD SUCCESS 48 [INFO] ------------------------------------------------------------------------ 49 [INFO] Total time: 4.352 s 50 [INFO] Finished at: 2019-11-09T16:02:27+08:00 51 [INFO] ------------------------------------------------------------------------

目录下查看项目,发现创建了一个web工程。

(2) 项目编译,进入项目目录,使用mvn compile命令,java源码和resources资源编译后的会在新生成的target目录下,其中target中有编译后的字节码文件。

 1 D:\\mvnProject\\mvntest>mvn compile
 2 [INFO] Scanning for projects...
 3 [INFO]
 4 [INFO] --------------------------< com.boe:mvntest >---------------------------
 5 [INFO] Building mvntest 1.0-SNAPSHOT
 6 [INFO] --------------------------------[ jar ]---------------------------------
 7 [INFO]
 8 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvntest --
 9 -
10 [INFO] Using \'UTF-8\' encoding to copy filtered resources.
11 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\main\\resour
12 ces
13 [INFO]
14 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvntest ---
15 [INFO] Changes detected - recompiling the module!
16 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\classes
17 [INFO] ------------------------------------------------------------------------
18 [INFO] BUILD SUCCESS
19 [INFO] ------------------------------------------------------------------------
20 [INFO] Total time:  2.519 s
21 [INFO] Finished at: 2019-11-09T16:18:23+08:00
22 [INFO] ------------------------------------------------------------------------

编译后目录。

 

(3) mvn test命令,会执行test源码中的方法,这里执行的是默认生成的方法。

src/test/AppTest.java文件内容。

 1 package com.boe;
 2 
 3 import junit.framework.Test;
 4 import junit.framework.TestCase;
 5 import junit.framework.TestSuite;
 6 
 7 /**
 8  * Unit test for simple App.
 9  */
10 public class AppTest 
11     extends TestCase
12 {
13     /**
14      * Create the test case
15      *
16      * @param testName name of the test case
17      */
18     public AppTest( String testName )
19     {
20         super( testName );
21     }
22 
23     /**
24      * @return the suite of tests being tested
25      */
26     public static Test suite()
27     {
28         return new TestSuite( AppTest.class );
29     }
30 
31     /**
32      * Rigourous Test :-)
33      */
34     public void testApp()
35     {
36         assertTrue( true );
37     }
38 }
View Code

执行mvn test命令结果。

 # 进入项目目录进行测试
1
D:\\mvnProject\\mvntest>mvn test 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] --------------------------< com.boe:mvntest >--------------------------- 5 [INFO] Building mvntest 1.0-SNAPSHOT 6 [INFO] --------------------------------[ jar ]--------------------------------- 7 [INFO] 8 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvntest -- 9 - 10 [INFO] Using \'UTF-8\' encoding to copy filtered resources. 11 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\main\\resour 12 ces 13 [INFO] 14 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvntest --- 15 [INFO] Changes detected - recompiling the module! 16 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\classes 17 [INFO] 18 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mv 19 ntest --- 20 [INFO] Using \'UTF-8\' encoding to copy filtered resources. 21 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\test\\resour 22 ces 23 [INFO] 24 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvntest 25 --- 26 [INFO] Changes detected - recompiling the module! 27 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\test-classes 28 [INFO] 29 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvntest --- 30 [INFO] Surefire report directory: D:\\mvnProject\\mvntest\\target\\surefire-reports 31
# 测试后打印输出 T E S T S 32 ------------------------------------------------------- 33 T E S T S 34 ------------------------------------------------------- 35 Running com.boe.AppTest 36 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec 37 38 Results : 39 40 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 41 42 [INFO] ------------------------------------------------------------------------ 43 [INFO] BUILD SUCCESS 44 [INFO] ------------------------------------------------------------------------ 45 [INFO] Total time: 2.832 s 46 [INFO] Finished at: 2019-11-09T16:28:20+08:00 47 [INFO] ------------------------------------------------------------------------

测试完成后,target目录显示如下,其中编译后的class文件在test-classes目录下,而surefire-reports目录下保存的是测试后的结果。

surefire-reports中内容为测试结果,其中xml文件中的内容除了测试结果还包含更多的信息,如虚拟机名字,编码,时区,当前机器名字等等,txt中内容只有测试结果。

# com.boe.AppTest.txt文件内容
------------------------------------------------------------------------------- Test set: com.boe.AppTest ------------------------------------------------------------------------------- Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

(4)打包命令mvn package, 这个命令最常用,如大数据hadoop写好的MapReduce程序打成jar包后,放到hdfs集群中运行,不过最好先执行mvn clean清除target目录下内容,防止对本次命令产生影响,执行这个命令会默认执行mvn test,mvn compile。

# 在项目目录下执行mvn package 
1
D:\\mvnProject\\mvntest>mvn package 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] --------------------------< com.boe:mvntest >--------------------------- 5 [INFO] Building mvntest 1.0-SNAPSHOT
# 打成jar包,这个是在项目pom.xml中通过packaging标签指定的,
# 此外还有war,pom等打包方式,其中war包一般用在tomcat中,pom用在SpringCloud微服务中创建父pom工程用
6 [INFO] --------------------------------[ jar ]--------------------------------- 7 [INFO] 8 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvntest -- 9 - 10 [INFO] Using \'UTF-8\' encoding to copy filtered resources. 11 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\main\\resour 12 ces 13 [INFO] 14 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvntest --- 15 [INFO] Changes detected - recompiling the module! 16 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\classes 17 [INFO] 18 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mv 19 ntest --- 20 [INFO] Using \'UTF-8\' encoding to copy filtered resources. 21 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\test\\resour 22 ces 23 [INFO] 24 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvntest 25 --- 26 [INFO] Changes detected - recompiling the module! 27 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\test-classes 28 [INFO] 29 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvntest --- 30 [INFO] Surefire report directory: D:\\mvnProject\\mvntest\\target\\surefire-reports 31
# 可以看出进行的mvn test 32 ------------------------------------------------------- 33 T E S T S 34 ------------------------------------------------------- 35 Running com.boe.AppTest 36 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec 37 38 Results : 39 40 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 41 42 [INFO] 43 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mvntest ---
# 打包成功,生成jar文件 44 [INFO] Building jar: D:\\mvnProject\\mvntest\\target\\mvntest-1.0-SNAPSHOT.jar 45 [INFO] ------------------------------------------------------------------------ 46 [INFO] BUILD SUCCESS 47 [INFO] ------------------------------------------------------------------------ 48 [INFO] Total time: 2.670 s 49 [INFO] Finished at: 2019-11-09T17:03:20+08:00 50 [INFO] ------------------------------------------------------------------------

(5)mvn install命令的效果,就是让当前工程打包资源后,变成本地库的一部分,交给了本地库管理,可以通过坐标获取项目中的jar包。

# 当前目录下执行命令
1
D:\\mvnProject\\mvntest>mvn install 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] --------------------------< com.boe:mvntest >--------------------------- 5 [INFO] Building mvntest 1.0-SNAPSHOT 6 [INFO] --------------------------------[ jar ]--------------------------------- 7 [INFO] 8 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvntest -- 9 - 10 [INFO] Using \'UTF-8\' encoding to copy filtered resources.
# 资源目录没有直接skip
11 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\main\\resour 12 ces 13 [INFO] 14 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvntest --- 15 [INFO] Changes detected - recompiling the module! 16 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\classes 17 [INFO] 18 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mv 19 ntest --- 20 [INFO] Using \'UTF-8\' encoding to copy filtered resources. 21 [INFO] skip non existing resourceDirectory D:\\mvnProject\\mvntest\\src\\test\\resour 22 ces 23 [INFO] 24 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvntest 25 --- 26 [INFO] Changes detected - recompiling the module!
# 可以看出执行了mvn compile 27 [INFO] Compiling 1 source file to D:\\mvnProject\\mvntest\\target\\test-classes 28 [INFO] 29 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvntest --- 30 [INFO] Surefire report directory: D:\\mvnProject\\mvntest\\target\\surefire-reports 31
# 可以看出执行了mvn test 32 ------------------------------------------------------- 33 T E S T S 34 ------------------------------------------------------- 35 Running com.boe.AppTest 36 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec 37 38 Results : 39 40 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 41 42 [INFO] 43 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mvntest --- 44 [INFO] Building jar: D:\\mvnProject\\mvntest\\target\\mvntest-1.0-SNAPSHOT.jar 45 [INFO] 46 [INFO] --- maven-install-plugin:2.4:install (default-install) @ mvntest ---
# 安装jar资源到本地库 47 [INFO] Installing D:\\mvnProject\\mvntest\\target\\mvntest-1.0-SNAPSHOT.jar to d:\\al 48 i_repo\\com\\boe\\mvntest\\1.0-SNAPSHOT\\mvntest-1.0-SNAPSHOT.jar
# 安装pom文件到本地库
49 [INFO] Installing D:\\mvnProject\\mvntest\\pom.xml to d:\\ali_repo\\com\\boe\\mvntest\\1 50 .0-SNAPSHOT\\mvntest-1.0-SNAPSHOT.pom 51 [INFO] ------------------------------------------------------------------------ 52 [INFO] BUILD SUCCESS 第3章:Maven使用入门/3.2 编写源代码

Atom编辑器入门到精通 Atom使用进阶

maven入门

Maven入门介绍

Maven使用入门之Hello World

Mybaits 快速入门代码实例(maven代码版)