首先我们创建一个名为 hello-world 的 Maven 项目,项目的目录结构如下
[root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src [root@ci-node2 hello-world]# tree . . ├── pom.xml └── src // 这是 helo-world 源代码 ├── main │ └── java │ └── com │ └── juvenxu │ └── mvnbook │ └── helloworld │ └── HelloWorld.java └── test // 这是写的测试 单元测试 └── java └── com └── juvenxu └── mvnbook └── helloworld └── HelloWorldTest.java 13 directories, 3 files [root@ci-node2 hello-world]#
用测试 测试源代码正确不正确,符合不规范
pom.xml 是maven项目的核心,maven构建先去找pom.xml文件
maven 先去找pom.xml文件
mvn package 命令用于项目打包,会在模块下的 target 目录生成 jar 或者 war 等文件
对源码进行编译,打包成war包或者jar包
一定要去这个项目的的根目录,有pom.xml文件 的地方执行 mvn package
https://repo.maven.apache.org是maven 中心仓库
maven在执行构建时候,需要一些辅助jar包,这些辅助jar包从 maven的中心仓库下载,把一些依赖的包下载到本地 下载到项目
下载到.m2文件,m2也叫maven的本地仓库,远程仓库是maven中心仓库
当执行mvn package 命令时候,maven会找相关构建的依赖包,找依赖包先去,本地仓库 .m2文件找,
1.如果这个仓库里面有依赖包,直接从本地仓库.m2复制过来 执行
2.如果没有,就去maven中心仓库去找,maven中心仓库是一定有的,如果没有就报错了,有就下载到本地的m2文件里面,再执行构建,
所以第一次执行命令时候,会很慢,网速依赖,把jar包下完以后才能正常执行
可以搭私服,私服就是内网搭建一台服务器 代替maven中心仓库,先把maven的依赖包 下载到私服服务器上,这样就构建特别快,
每次执行构建时候都要去maven中心仓库拉一次,太慢了
pom.xml文件里面有 包的名称,版本,依赖,执行的构建,要执行的依赖包都在这个pom.xml文件定义的,
执行mvn package 命令时候 一定要在有pom.xml文件的同目录执行
执行完 会在项目文件夹下生成target目录,在target目录就是编译的结果,打包生成的结果都在这里
Downloaded: https://repo.maven.apache.org/maven2/asm/asm-commons/3.1/asm-commons-3.1.jar (32 KB at 61.2 KB/sec) Downloaded: https://repo.maven.apache.org/maven2/asm/asm-tree/3.1/asm-tree-3.1.jar (22 KB at 40.5 KB/sec) Downloaded: https://repo.maven.apache.org/maven2/jdom/jdom/1.0/jdom-1.0.jar (150 KB at 262.1 KB/sec) Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.jar (34 KB at 33.2 KB/sec) Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.5.5/plexus-utils-1.5.5.jar (246 KB at 167.6 KB/sec) [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing /root/hello-world/target/hello-world-1.0-SNAPSHOT.jar with /root/hello-world/target/hello-world-1.0-SNAPSHOT-shaded.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 12:58 min [INFO] Finished at: 2020-04-21T00:50:57+08:00 [INFO] Final Memory: 15M/37M [INFO] ------------------------------------------------------------------------
在当前目录生成一个target文件夹
[root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src drwxr-xr-x 7 root root 188 Apr 21 00:50 target
生成的包,全部都在这里面
[root@ci-node2 target]# ll total 8 drwxr-xr-x 3 root root 17 Apr 21 00:50 classes -rw-r--r-- 1 root root 3132 Apr 21 00:50 hello-world-1.0-SNAPSHOT.jar drwxr-xr-x 2 root root 28 Apr 21 00:50 maven-archiver drwxr-xr-x 3 root root 35 Apr 21 00:50 maven-status -rw-r--r-- 1 root root 2874 Apr 21 00:50 original-hello-world-1.0-SNAPSHOT.jar drwxr-xr-x 2 root root 125 Apr 21 00:50 surefire-reports drwxr-xr-x 3 root root 17 Apr 21 00:50 test-classes [root@ci-node2 target]#
jar包可以执行的,有输出 这个jar包就是生产Hello Maven
[root@ci-node2 target]# java -jar hello-world-1.0-SNAPSHOT.jar Hello Maven
我们可以看看源码
进入此路径
[root@ci-node2 hello-world]# cd src/main/java/com/juvenxu/mvnbook/helloworld/ [root@ci-node2 helloworld]# pwd /root/hello-world/src/main/java/com/juvenxu/mvnbook/helloworld
vim 类的源码
[root@ci-node2 helloworld]# vim HelloWorld.java
package com.juvenxu.mvnbook.helloworld; public class HelloWorld { public String sayHello() { return "Hello Maven"; } public static void main(String[] args) { System.out.print( new HelloWorld().sayHello() ); } }
再执行 第二次mvn package时候 ,就很快,因为 依赖包都下载到.m2文件。
找依赖包,先去.m2文件找,.m2文件有依赖包就直接获取,不用去maven中心仓库。 如果没有,就要去maven中心仓库下载
[root@ci-node2 hello-world]# mvn package [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.juvenxu.mvnbook:hello-world:jar:1.0-SNAPSHOT [WARNING] ‘build.plugins.plugin.version‘ for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 21, column 14 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Hello World Project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-world --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /root/hello-world/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-world --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-world --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /root/hello-world/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello-world --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-world --- [INFO] Surefire report directory: /root/hello-world/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.juvenxu.mvnbook.helloworld.HelloWorldTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.036 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello-world --- [INFO] [INFO] --- maven-shade-plugin:1.2.1:shade (default) @ hello-world --- [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing /root/hello-world/target/hello-world-1.0-SNAPSHOT.jar with /root/hello-world/target/hello-world-1.0-SNAPSHOT-shaded.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.878 s [INFO] Finished at: 2020-04-22T00:40:18+08:00 [INFO] Final Memory: 9M/21M [INFO] -----------------------------------------------------------------------
我们在此项目的基本上测试常用的 maven 命令:
mvn clean 命令用于清理项目生产的临时文件,一般是模块下的 target 目录
每次编译都会生成一些构建产物 执行mvn clean 把构建产物清除
把上次的结果清除掉
执行完mvn clean target目标没有了
[root@ci-node2 hello-world]# mvn clean [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.juvenxu.mvnbook:hello-world:jar:1.0-SNAPSHOT [WARNING] ‘build.plugins.plugin.version‘ for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 21, column 14 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Hello World Project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (4 KB at 2.2 KB/sec) Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.jar Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.jar (25 KB at 28.7 KB/sec) [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hello-world --- [INFO] Deleting /root/hello-world/target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.363 s [INFO] Finished at: 2020-04-22T00:48:46+08:00 [INFO] Final Memory: 7M/18M [INFO] ------------------------------------------------------------------------ [root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src
我们再执行 mvn package,这次 很快,生成构建
[root@ci-node2 hello-world]# mvn package [root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src drwxr-xr-x 7 root root 188 Apr 22 00:51 target
mvn test 命 令 用 于 测 试 , 用 于 执 行 src/test/java/ 下 的 测 试 用 例 , 使 用
-Dmaven.test.skip=true
参数可以跳过测试。
一个项目目录 有一套是源码和有一套是测试代码(单元测试),当执行mvn test 他会自动帮你 调用测试代码去测试类 有没有问题
如果没有问题,可以执行编译
如果有问题,会报错,解决错误,解决错误后才能继续
我们先执行 make clean 清除上次的构建
[root@ci-node2 hello-world]# mvn clean [root@ci-node2 hello-world]# mvn test [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.juvenxu.mvnbook:hello-world:jar:1.0-SNAPSHOT [WARNING] ‘build.plugins.plugin.version‘ for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 21, column 14 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Hello World Project 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-world --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /root/hello-world/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-world --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to /root/hello-world/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-world --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /root/hello-world/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello-world --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to /root/hello-world/target/test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-world --- [INFO] Surefire report directory: /root/hello-world/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.juvenxu.mvnbook.helloworld.HelloWorldTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.07 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.064 s [INFO] Finished at: 2020-04-22T00:57:41+08:00 [INFO] Final Memory: 13M/31M [INFO] ------------------------------------------------------------------------
我们进去生成的target目录,生成的 taget目录 没有jar包,他只是做了测试,通过与不通过
[root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src drwxr-xr-x 6 root root 85 Apr 22 00:57 target [root@ci-node2 hello-world]# cd target/ [root@ci-node2 target]# ll total 0 drwxr-xr-x 3 root root 17 Apr 22 00:57 classes drwxr-xr-x 3 root root 35 Apr 22 00:57 maven-status drwxr-xr-x 2 root root 125 Apr 22 00:57 surefire-reports drwxr-xr-x 3 root root 17 Apr 22 00:57 test-classes
mvn install 命令用于模块安装,将打包好的 jar/war 文件复制(安装到)到你的本地仓库.m2文件中,供其他模块使用
我们先看看m2文件 ,去根目录 cd /root/,看到隐藏文件.m2文件
[root@ci-node2 ~]# ls -al total 52 dr-xr-x---. 7 root root 277 Apr 22 00:39 . dr-xr-xr-x. 19 root root 250 Apr 12 22:16 .. -rw-------. 1 root root 1824 Aug 24 2019 anaconda-ks.cfg -rw-------. 1 root root 4718 Apr 20 02:41 .bash_history -rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout -rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc -rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc -rw-r--r-- 1 root root 51 Mar 30 00:33 .gitconfig drwxr-xr-x 3 root root 20 Apr 13 01:19 .groovy drwxr-xr-x 4 root root 46 Apr 22 00:57 hello-world -rw-r--r-- 1 root root 1325 Dec 17 2018 hello-world.tar.gz drwxr-xr-x 3 root root 24 Apr 21 00:37 .m2 drwxr-xr-x 2 root root 40 Apr 6 18:08 .oracle_jre_usage drwx------ 2 root root 57 Apr 12 22:33 .ssh -rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc -rw------- 1 root root 8407 Apr 22 00:39 .viminfo
我们进入.m2目录看看
[root@ci-node2 ~]# cd .m2/
[root@ci-node2 .m2]# ll total 0 drwxr-xr-x 13 root root 190 Apr 21 00:50 repository
[root@ci-node2 .m2]# cd repository/
[root@ci-node2 repository]# ll total 0 drwxr-xr-x 6 root root 70 Apr 21 00:50 asm drwxr-xr-x 3 root root 38 Apr 21 00:50 backport-util-concurrent drwxr-xr-x 3 root root 25 Apr 21 00:38 classworlds drwxr-xr-x 3 root root 20 Apr 21 00:39 com drwxr-xr-x 3 root root 25 Apr 21 00:38 commons-cli drwxr-xr-x 3 root root 26 Apr 21 00:50 commons-lang drwxr-xr-x 3 root root 33 Apr 21 00:50 commons-logging drwxr-xr-x 3 root root 18 Apr 21 00:50 jdom drwxr-xr-x 3 root root 19 Apr 21 00:38 junit drwxr-xr-x 3 root root 19 Apr 21 00:50 log4j drwxr-xr-x 6 root root 65 Apr 21 00:39 org
我们到com目录,找不到项目 heloworld 的包
[root@ci-node2 repository]# cd com [root@ci-node2 com]# ll total 0 drwxr-xr-x 5 root root 51 Apr 21 00:50 google
到项目目录
[root@ci-node2 com]# cd /root/hello-world [root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src drwxr-xr-x 6 root root 85 Apr 22 00:57 target
我们先执行 make clean 清除上次的构建
[root@ci-node2 hello-world]# mvn clean
执行 mvn install ,执行完以后,他会把 jar包 复制(安装到,部署到)到.m2文件 的本地仓库里面
执行完,本地有jar包
[root@ci-node2 hello-world]# ll total 4 -rw-r--r-- 1 root root 1683 Aug 26 2010 pom.xml drwxr-xr-x 4 root root 30 Oct 10 2009 src drwxr-xr-x 7 root root 188 Apr 22 01:12 target [root@ci-node2 hello-world]# cd target/ [root@ci-node2 target]# ll total 8 drwxr-xr-x 3 root root 17 Apr 22 01:12 classes -rw-r--r-- 1 root root 3131 Apr 22 01:12 hello-world-1.0-SNAPSHOT.jar drwxr-xr-x 2 root root 28 Apr 22 01:12 maven-archiver drwxr-xr-x 3 root root 35 Apr 22 01:12 maven-status -rw-r--r-- 1 root root 2873 Apr 22 01:12 original-hello-world-1.0-SNAPSHOT.jar drwxr-xr-x 2 root root 125 Apr 22 01:12 surefire-reports drwxr-xr-x 3 root root 17 Apr 22 01:12 test-classes
部署 提示信息有
[INFO] Installing /root/hello-world/target/hello-world-1.0-SNAPSHOT.jar to /root/.m2/repository/com/juvenxu/mvnbook/hello-world/1.0-SNAPSHOT/hello-world-1.0-SNAPSHOT.jar [INFO] Installing /root/hello-world/pom.xml to /root/.m2/repository/com/juvenxu/mvnbook/hello-world/1.0-SNAPSHOT/hello-world-1.0-SNAPSHOT.pom
看到juvenxu 目录
[root@ci-node2 target]# cd /root/.m2/repository/com/ You have new mail in /var/spool/mail/root [root@ci-node2 com]# ll total 0 drwxr-xr-x 5 root root 51 Apr 21 00:50 google drwxr-xr-x 3 root root 21 Apr 22 01:12 juvenxu [root@ci-node2 com]# pwd /root/.m2/repository/com
用tree命令执行下,看到jar包了
[root@ci-node2 com]# tree juvenxu/ juvenxu/ └── mvnbook └── hello-world ├── 1.0-SNAPSHOT │ ├── hello-world-1.0-SNAPSHOT.jar │ ├── hello-world-1.0-SNAPSHOT.pom │ ├── maven-metadata-local.xml │ └── _remote.repositories └── maven-metadata-local.xml 3 directories, 5 files
maven仓库就是存放依赖、构建的地方,有maven两种、
1.本地仓库 .m2文件
2.远程仓库 maven 中央仓库 ,私服
原文:https://www.cnblogs.com/mingerlcm/p/12742077.html