zoukankan      html  css  js  c++  java
  • 常用 maven 命令

    首先我们创建一个名为 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

    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] -----------------------------------------------------------------------

    mvn clear

    我们在此项目的基本上测试常用的 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

    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

     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 中央仓库 ,私服

  • 相关阅读:
    java多线程-阻塞队列BlockingQueue
    java多线程-ThreadLocal
    JZ-C-26
    JZ-C-25
    JZ-C-24
    JZ-C-23
    JZ-C-22
    JZ-C-21
    JZ-C-20
    JZ-C-19
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/12742077.html
Copyright © 2011-2022 走看看