前言
最近和朋友交流技术,发现很多人在idea右侧maven面板不清楚全部的命令意思,有些人甚至都没打开甚至没使用过clean命令,有些人不知道install命令,这让我很惊讶…所以尝试用自己认为好理解的方式做一个总结,以后可以那这个水一期组内技术分享😋
Maven简介
maven简单来说有两件重要事
打包
java被称为是半解释语言,一方面java有一个预编译的过程,需要把.java变成.class在java虚拟机上跑,.class又在jvm上解释运行。java 提供javac来进行编译java文件,但是辣么多.java的文件总需要有工具来帮助我们统一打包。mvn可以帮我们做到,只需要maven compiler
就可以帮我们编译整个项目。
导包
在写代码的时候,大部分情况你不是cmd+c和cmd+v代码就是在github上找轮子。cv代码好敲,但是你找到的轮子要整合带你的项目里面,要把jar包下载下来然后add到一个你创建的目录下,你自己去找到并且下载,还要自己管理。maven可以帮我们很好的做到,只需要一个pom文件就可以导入各种依赖包还可以做很多项目配置。
最重要的是,如果你使用maven,打包和导包可以完美结合,让你可以B项目打包的时候可以导入你A项目打成的包。
依赖坐标
这里默认你原来就是用过maven,自然是知道maven的依赖坐标规则
<dependency>
<!-- 包名,这个在本地仓库是根据这个名字来排文件夹的 -->
<groupId>cn.hutool</groupId>
<!-- 具体的依赖名字 -->
<artifactId>hutool-all</artifactId>
<!-- 版本号 -->
<version>5.6.5</version>
</dependency>
maven所有的依赖其实都放在云端,maven官方有一个叫中央仓库的地方,默认会去那里拉取,当然你也可以设置自己的私服仓库(一般公司都会有内网的仓库),就可以配置优先从私服拉取。拉取到的包都会存放到本地,成为本地仓库。这一切都是可以设置的,包括中央仓库的镜像,私服仓库的地址,本地仓库的路径等等。
优先级是先查看本地仓库是否存在(根据groupId的路径+artifactId的名字),如果不存在再去中央仓库拉取,拉到以后就放本地仓库。
生命周期
说清楚上面以后,这些构建生命周期的命令,稍微解释解释就好啦。
命令 | 解释 |
---|---|
clean | 表示运行清理操作(会默认把target文件夹中的数据清理) |
compile | 编译,会将代码编译到target文件夹中 |
test | 单元测试框架(例如JUnit)运行测试(一般我会禁用掉) |
package | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
install | 会将打好的包安装到本地仓库中,以便其他的项目可以调用。 |
deploy | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
那么其中用的比较多的,就是clean/compile/package/install,下面我用idea的maven插件来演示,当然也可以在终端中使用maven的原生命令,e.g. mvn clean
Clean
这个就是非常简单,我一般遇到无法解决的bug就会clean一下😂。其实这个就是把target文件夹都删掉了(target是maven编译后的文件聚集地),这样就可以强制重新编译,让idea吃上最新的代码。
compile
这个和上面有点相反,上面是删除target文件夹,这个就是生成文件夹,这个命令我一般用于…检测我的代码能不能过编译,一般我代码上传到git上之前都会执行一下,防止自己提交的代码编译期都过不了。
package
这个相信大家都常用,即便是不在本地打包使用,也会在一些CI/DI的工具上看到类似这样的maven命令mvn package -Dmaven.test.skip=true -P prod
,这就是对生产环境打包。点击打包以后,首先会对当前项目进行编译,然后在把编译的代码打成一个jar包(当然在pom文件里面可以配置打成什么格式)
install
如果你有提供给公司团队内写组件,一般会把自己的项目打成一个jar包然后让别的同事应用到他自己的项目里。或者你自己有两个项目,并且项目没有在一个工程里面,b项目引用a项目,那么本地测试调的时候应该使用install把a项目打到本地仓库进行调试。
-
我们先写一个demo02,指定groupId和artifactId
-
我们查看一下我们本地仓库,是否有这个
cn.someget.maven
的路径嵌套文件夹
-
在另外一个工程的pom文件去通过groupId去依赖这个工程(注意不能再同一个工程,同一个工程下默认maven会检测到)
- 然后我们对项目进行install,我们看一下会发生什么/如下图可以看到,这个依赖项目导入不报错了,在本地仓库也可以看到刚刚打的jar包被放在cn下的someget下的maven下的版本号下面
后言
本来还想写一个项目到github上,国庆放假实在是太好玩了,就简单写了一下,主要想表达的就是maven项目构建声明周期的概念,除了clean外,其他周期都是会一层一层叠加的,例如我package的话,我会先complier,我install的话我会想compiler然后再package。具体大家clean一下以后,然后直接install然后看看是否有target文件夹,文件夹里面是不是有jar包,本地仓库是不是有groupId的路径来测试一下。
(转载本站文章请注明作者和出处 没有气的汽水)
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ├ 文章已经完啦, 想要第一时间收到文章更新可以关注↓ ┤ └┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘
Post Directory
下面是评论区,欢迎大家留言探讨或者指出错误哈