乐趣区

关于java:实话实说-这些maven命令你会几个

关注“Java 后端技术全栈”

回复“面试”获取全套面试材料

明天有位微信好友私下问我:mvn install 怎么如同把 mvn compile 的活也干了,所以我平时都是应用 mvn install 就 ok 了。奇怪的是,为什么还要搞个 mvn compile 呢?

听了这位敌人这么说,我想起了,我刚刚开始应用 mvn 的时候,好像也是这样的。

我老大就是这么教我的,我就这么用,感觉蛮爽的 …

有时候看到大佬们应用 mvn …. 一长串命令的时候,就会蒙圈了,这是什么命令?什么 -Dxxx -Pxxx 的。

于是想了想还是很有必要来写一篇对于 Maven 命令的文章,心愿通过此分享大家能把握更多的 mvn 命令。

应用命令创立我的项目

以下是命令模板:

mvn archetype:generate 固定格局
-DgroupId 组织标识(包名)-DartifactId 项目名称
-DarchetypeArtifactId 指定 ArchetypeId,maven-archetype-quickstart,创立一个 Java Project;maven-archetype-webapp,创立一个 Web Project
-DinteractiveMode 是否应用交互模式
-DarchetypeCatalog=local 离线模式

上面咱们就来演示一下如何创立我的项目,咱们演示两种我的项目:规范的我的项目和 web 类型的我的项目。

创立 java 规范我的项目

咱们来创立一个 my-maven 的我的项目。

应用命令:

mvn archetype:generate -DgroupId=com.tian.maven -DartifactId=my-maven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local

进入本人的 workspace 中。

这个是咱们之前手动创立的 maven 我的项目,明天咱们应用命令来创立一个 my-maven 我的项目。

关上运行窗口。

输出下面的命令:

按下 Enter 键。

BUILD SUCCESS,示意咱们构建胜利。回到咱们的 workspace 中。

发现曾经创立好了 my-maven 我的项目。

my-maven 我的项目构造

my-maven
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- tian
    |               `-- maven
    |                   `-- App.java
    `-- test
         `-- java
            `-- com
                 `-- tian
                    `-- maven
                        `-- AppTest.java

咱们关上这个 pom.xml 文件。

pom 文件头部标签

咱们这里对这些标签做一个简略的阐明:

<modelVersion>:模型版本。maven2.0 必须是这样写,当初是 maven2 惟一反对的版本。

<groupId>:公司或者组织的惟一标记,并且配置时生成的门路也是由此生成,如:com.tian.trade,maven 会将该我的项目打成的 jar 包放本地门路:/com/tian/trade

<artifactId>:本我的项目的惟一 ID,一个 groupId 上面可能多个我的项目,就是靠 artifactId 来辨别的。

<version>:本我的项目目前所处的版本号。

<packaging>:打包的机制,如 pom、jar、maven-plugin、ejb、war、ear、rar、par,默认为 jar。

<name>:项目名称。

<url>:地方仓库地址。

<dependencies>:定义本我的项目的依赖关系。

<dependency>:每个 dependency 都对应这一个 jar 包。个别状况下,maven 是通过 groupId、artifactId、version 这三个元素值(俗称坐标)来检索该构件,而后引入你的工程。如果他人想援用你当初开发的这个我的项目(前提是已开发结束并公布到了近程仓库),就须要在他的 pom 文件中新建一个 dependency 节点,将本我的项目的 groupId、artifactId、version 写入,maven 就会把你上传的 jar 包下载到他的本地。

<scope>:依赖范畴。scope 蕴含如下的取值:compile(编译范畴)、provided(已提供范畴)、runtime(运行时范畴)、test(测试范畴)、system(零碎范畴)。

AppTest 类内容就是测试 main 目录下的 App 类。这里应用到的 junit 测试。仔细点也会发现外面 Test 相干的类都是 junit 包目录下的,并且在 pom.xml 文件中咱们也看到了因为默认依赖 junit。

ok,以上便是应用 maven 命令创立的一个 java 规范我的项目。是不是感觉很爽。不须要手动一个一个创立文件夹和类了。

其实,还能够应用绝对简略的命令来搞定。

mvn archetype:generate -DgroupId=com.tian.maven -DartifactId=my-maven -Dversion=1.0-SNAPSHOT

成果和下面的一样。

创立 web 我的项目

同样在咱们的 workspace 中创立:

按下 Enter 键:

这样咱们的 web 我的项目就创立胜利了。上面咱们来看看创立了些什么:

同样的创立了 src 目录和 pom 文件。先看 pom.xml 内容:

pom.xmln 内容和后面的没什么区别。

my-web-maven 我的项目构造

 my-web-maven
    |-- pom.xml
    `-- src
        |-- main
            `-- resource
            `-- webapp
                `-- index.jsp
                `-- WEB-INF
                    `-- web.xml

其中 resource 目录下啥也没有,因为配置文件须要咱们本人增加,maven 也不晓得咱们须要的是 xml、properties 还是什么配置文件。

进入 webapp 目录下有个 index.jsp 和 WEB-INF,WEB-INF 外面有个 web.xml。

以上目录就是咱们搞 SpringMVC 的简略版目录。然而咱们想要寄存 java 源文件还得本人创立 java 目录。

ok,到这里咱们应用 Maven 创立一个 web 我的项目就搞定了。

然而很多人可能会感觉麻烦,所以也有另外的懒人方法:也能够在 IDEA 中新建 java 我的项目、新建 web 我的项目。

- D 和 - P 参数

Maven 命令参数 中的 -D 示意 Properties 属性,而 -P 示意 Profiles 配置文件。

- D 结尾

D 示意设置 Properties 属性,应用命令行设置属性 -D 模板:

mvn -DpropertyName=propertyValue clean package

如果 propertyName 不存在于 pom.xml 文件中,它将被设置。如果 propertyName 曾经存在 pom.xml 文件中,其值将被作为参数传递的值笼罩。

比方咱们在创立 java 规范我的项目中用到了 -DgroupId、DartifactId 以及 -Dversion。- D 前面的都在 pom.xml 文件中有对应的标签。

-DgroupId=com.tian.maven

就是给 groupId 赋值,其余相似。最初咱们就得出了。

version 咱们没有指定,应用的是默认的。同样也是能够给 version 赋值的:

-Dversion=1.0-SNAPSHOT

要设置多个变量,请应用多个空格分隔符加 -D:

mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC

- P 结尾

-P 代表 Profiles 配置文件的属性,也就是说在指定的中,能够通过 - P 进行传递或者赋值。通常示意咱们要打那个环境的 jar 包,在理论我的项目中还会随同着相应环境的配置文件。

比方通常应用:mvn test -Ptest。示意指定为 test 环境。

常用命令

下面咱们曾经创立了两个我的项目 java 规范我的项目和 web 我的项目。上面咱们就以 java 规范我的项目为例,来演示一下几个命令。

mvn compile

编译我的项目。

编译胜利后会减少一个 target 目录(编译后的文件)。

这个 target 目录在后面文章中曾经说过,这里就不在赘述了。

mvn clean

删除 target 整个目录。

mvn test

测试,前提是咱们集成了 junit,并且有 test 目录,还有对应的测试类。

从日志中能够看出其失败、谬误以及耗时等信息。另外还发现在 target 目录下多了个 test-classes 目录:

其实就是把测试类编译后,放在这个目录下。

mvn package

打包,持续应用下面的我的项目进行演示:

执行 mvn package 的时候也执行了 mvn test。因为生命周期的程序来,package 在 test 前面。并且还打成了 jar 包。

在 target 目录下能够看到:

mvn install

装置,就是把咱们的大号的 jar,装置到咱们的本地仓库中去。

当初我的本地仓库中是没有下面的 my-maven-1.0-SNAPSHOT.jar 包的。

咱们执行 mvn install 命令:

从日志中能够看出,同样也执行了 mvn test,另外 install 命令 中把咱们的 my-maven-1.0-SNAPSHOT.jar 包拷贝一份到本地仓库中去了。

命令联合应用

后面咱们演示都是单命令进行演示。

mvn clean compile、mvn clean install 等。

IDEA 中可视化

在 IDEA 中咱们能够应用可视化,双击就搞定的了下面的那些 mvane 命令。状况下图:

比方:双击 clean:

也能够在 IDEA 中输出命令形式:

上面几个比拟罕用:

  • 跳过测试:-Dmaven.test.skip(=true)
  • 指定端口:-Dmaven.tomcat.port=9090
  • 疏忽测试失败:-Dmaven.test.failure.ignore=true。

当然, 如果你的其它关联我的项目有过更新的话,肯定要在我的项目根目录下运行 mvn clean install 来执行更新,再运行 mvn tomcat:run 使改变失效。

其余命令

  • mvn eclipse:eclipse:生成 eclipse 我的项目。
  • mvn idea:idea:生成 idea 我的项目。
  • mvn test-compile:编译测试的内容。
  • mvn test -skipping compile -skipping test-compile:只测试而不编译,也不测试编译。
  • mvn -version/-v:显示版本信息。
  • mvn -Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类。
  • mvn -e:显示具体谬误 信息.
  • mvn -U:强制更新依赖包
  • mvn -B:该参数示意让 Maven 应用批处理模式构建我的项目
  • mvn clean install -pl user-dao:只对 user-dao 进行装置。
  • springboot:run:就是运行 Spring Boot 我的项目,对应还有 start、stop。
  • mvn jetty:run:在 jetty 上运行我的项目。

公布第三方 jar 到本地仓库中

理论开发中会遇到某些 jar 包并不在地方仓库或者咱们的私服里,然而咱们我的项目应用的是 maven,这时会比拟好的方法就是包这个 jar 包放到咱们的私服里,这样咱们就能够更好的治理了。

比如说:某某领取须要的 jar,某某短信发送须要的 jar 等。

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar 
-Dfile=d:client-0.1.0.jar -DdownloadSources=true -DdownloadJavadocs=true

留神:版本、包以后寄存目录、groupId、artifactId。

小帮手

  • mvn help:system 显示平台详细信息的列表,例如零碎属性和环境变量。
  • mvn help:active-profiles 列出了以后对构建 [无效的配置] 文件。
  • mvn help:all-profiles 列出以后我的项目下的可用配置文件。
  • mvn help:describe:形容插件和 / 或 Mojo(Maven 一般的 Old Java Object)的属性。
  • mvn help:evaluate:以交互方式评估用户给出的 Maven 表达式。
  • mvn help:effective-pom:将无效的 POM 显示为以后版本的 XML,并思考了流动配置文件。如果为 verbose,则会向每个 XML 元素增加一个正文,以形容行的终点。
  • mvn help:effective-settings:会在给定配置文件加强性能以及将全局设置继承到用户级别设置的状况下,将计算出的设置显示为我的项目的 XML。

你是否因为记不清某个插件有哪些 goal 而苦楚过, 你是否因为想不起某个 goal 有哪些参数而苦恼, 那就试试这个命令吧, 它会通知你所有的。参数:

-Dplugin=pluginName   
-Dgoal(或 -Dmojo)=goalName:

-Dgoal 与 -Dplugin 一起应用,它会列出某个插件的 goal 信息。

如果嫌不够具体, 同样能够加 -Ddetail,(注: 一个插件 goal 也被认为是一个“Mojo”,Maven plain Old Java Object,这个在前面的插件中讲)。

mvn help:describe -Dplugin=help -Dmojo=describe

面试题:说说 mvn compile、package、install、deploy 的区别

  1. mvn compile,编译类文件
  2. mvn package,蕴含 mvn compile,打成 jar 或者 war 等,并存放到 target 目录下
  3. mvn install,蕴含 mvn compile,mvn package,而后上传到本地仓库
  4. mvn deploy,蕴含 mvn install, 而后,上传到私服

总结

本文讲述了如何应用 maven 命令创立 java 规范我的项目和 web 我的项目。讲述了 - D 结尾和 - P 结尾参数的含意。讲述了命令的应用和阐明,面试题以及在 IDEA 中的两种应用形式。

「PS」:Maven 命令看起来简略,一学即会。Mvane 就是领导,插件就是咱们开发人员,真正干活的人其实咱们开发人员。所以 Maven 实质上是一个插件框架,它的外围并不执行任何具体的构建工作,所有这些工作都交给插件来实现。前面咱们会有一篇专门解说 maven 插件的,敬请期待~

「人生的关键在于:只有用心做了,输和赢都很精彩。」

举荐浏览

面试官:Mybatis 里的设计模式有哪些?我一口气答了 8 种

自学编程的 4 大误区,你中招了吗?

6000 多字 | 秒杀零碎设计留神点

退出移动版