Maven有哪些优点和缺点

更新时间:2023-07-28 07:00:51 阅读: 评论:0

Maven有哪些优点和缺点
⼀、Maven有哪些优点和缺点
优点如下:
1. 简化了项⽬依赖管理:
高考小语种
2. 易于上⼿,对于新⼿可能⼀个"mvn clean package"命令就可能满⾜他的⼯作
3. 便于与持续集成⼯具(jenkins)整合
4. 便于项⽬升级,⽆论是项⽬本⾝升级还是项⽬使⽤的依赖升级。
5. 有助于多模块项⽬的开发,⼀个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,⽽不⽤⾃⼰去编译。
6. maven有很多插件,便于功能扩展,⽐如⽣产站点,⾃动发布版本等
缺点如下:
1. maven是⼀个庞⼤的构建系统,学习难度⼤
2. maven采⽤约定优于配置的策略(convention over configuration),虽然上⼿容易,但是⼀旦出了问题,难于调试。
3. 当依赖很多时,m2eclip ⽼是搞得Eclip很卡。抖字组词
4. 中国的⽹络环境差,很多repository⽆法访问,⽐如google code, jboss 仓库⽆法访问等。
⼆、Maven坐标
⼀般maven使⽤[groupID,artifactId,version,packaging]来表⽰⼀个项⽬的某个版本,有时还会使⽤classifier来表⽰项⽬的附属构建,常见的附属构建有javadoc和sources包。
三、Maven常见的依赖范围有哪些?
1. compile:编译依赖,默认的依赖⽅式,在编译(编译项⽬和编译测试⽤例),运⾏测试⽤例,运⾏(项⽬实际运⾏)三个阶段都有效,
典型地有spring-core等jar。
2. test:测试依赖,只在编译测试⽤例和运⾏测试⽤例有效,典型地有JUnit。
3. provided:对于编译和测试有效,不会打包进发布包中,典型的例⼦为rvlet-api,⼀般的web⼯程运⾏时都使⽤容器的rvlet-api。
4. runtime:只在运⾏测试⽤例和实际运⾏时有效,典型地是jdbc驱动jar包。
5. system: 不从maven仓库获取该jar,⽽是通过systemPath指定该jar的路径。
6. import: ⽤于⼀个dependencyManagement对另⼀个dependencyManagement的继承。
四、Maven的⽣命周期
maven有三套⽣命周期,分别为:
1、clean 周期:主要⽤于清理上⼀次构建产⽣的⽂件,可以理解为删除target⽬录
2、默认周期,
主要阶段包含:
1. process-resources 默认处理src/test/resources/下的⽂件,将其输出到测试的classpath⽬录中,我要上小学了
2. compile 编译src/main/java下的java⽂件,产⽣对应的class,
微信名女生简单气质
3. process-test-resources 默认处理src/test/resources/下的⽂件,将其输出到测试的classpath⽬录中,
4. test-compile 编译src/test/java下的java⽂件,产⽣对应的class,师德师风读书笔记
5. test 运⾏测试⽤例,
6. package 打包构件,即⽣成对应的jar, war等,
7. install将构件部署到本地仓库,
8. deploy 部署构件到远程仓库
3、site周期
主要阶段包含
site 产⽣项⽬的站点⽂档
site-deploy 将项⽬的站点⽂档部署到服务器
五、我们经常使⽤“Mvn Clean Package”命令进⾏项⽬打包,请问该命令执⾏了哪些动作来完成该任务?
在这个命令中我们调⽤了maven的clean周期的clean阶段绑定的插件任务,以及default周期的package阶段绑定的插件任务
默认执⾏的任务有(maven的术语叫goal, 也有⼈翻译成⽬标,我这⾥⽤任务啦):
maven-clean-plugin:clean->
maven-resources-plugin:resources->
maven-compile-plugin:compile->
mavne-resources-plugin:testResources->
maven-compile-plugin:testCompile->命里注定
maven-jar-plugin:jar
六、依赖的解析机制
1. 解析发布版本:如果本地有,直接使⽤本地的,没有就向远程仓库请求。
2. 解析快照版本:合并本地和远程仓库的元数据⽂件-groupId/artifactId/l,这个⽂件存的版本都是带时间戳
的,将最新的⼀个改名为不带时间戳的格式供本次编译使⽤。
3. 解析版本为LATEST,RELEASE,过于复杂,且解析的结果不稳定,不推荐在项⽬中使⽤,感兴趣的同学⾃⼰去研究,简⽽⾔之就是
合并groupId/l找到对应的最新版本和包含快照的最新版本。
七、插件的解析机制
当我们输⼊"mvn dependency:tree"这样的指令,解析的步骤为:
解析groupID:
maven使⽤默认的groupID:"org.apache.maven.plugins"或者"jo"淘宝客导购网站
解析artifactId(maven的官⽅叫做插件前缀解析策略)
合并该groupId在所有仓库中的元数据库⽂件(l),⽐如maven官⽅插
件的元数据⽂件所在的⽬录为
org\apache\maven\plugins,该⽂件下有如下的条⽬
1 2 3 4 5<plugin>
<name>Maven Dependency Plugin</name>
<prefix>dependency</prefix>
<artifactId>maven-dependency-plugin</artifactId> </plugin>
通过⽐较这样的条⽬,我们就将该命令的artifactId解析为maven-dependency-plugin
解析version
如果你在项⽬的pom中声明了该插件的版本,那么直接使⽤该版本的插件,否则合并所有仓库中groupId/l,找到最新的发布版本。
对于⾮官⽅的插件,有如下两个⽅法可以选择:
1)使⽤groupId:artifactId:version:goal 来运⾏,好长~~~~~~~~~~
2)在l中添加pluginGroup项,这样maven不能在官⽅的插件库中解析到某个插件,那么就可以去你配置的group下查找啦。⼋、多模块如何聚合
配置⼀个打包类型为pom的聚合模块,然后在该pom中使⽤<module>元素声明要聚合的模块
九、对于⼀个多模块项⽬,如果管理项⽬依赖的版本
特别反义词是什么通过在⽗模块中声明dependencyManagement和pluginManagement,然后让⼦模块通过<parent>元素指定⽗模块,这样⼦模块在定义依赖是就可以只定义groupId和artifactId,⾃动使⽤⽗模块的version,这样统⼀整个项⽬的依赖的版本。
⼗、⼀个项⽬的依赖来源于不同的组织,可能这些依赖还会依赖别的Jar包,如何保证这些传递依赖不会引起版本冲突。
使⽤<dependency>的<exclusion>元素将会引起冲突的元素排除。
⼗⼀、常见的Maven私服的仓库类型。
(宿主仓库)hosted repository, (代理仓库)proxy repository, (仓库组)group repository
⼗⼆、如何查询⼀个插件有哪些⽬标(Goal)
mvn help:describe -Dplugin=groupId:artifactId
from: www.javacoder/?p=211

本文发布于:2023-07-28 07:00:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1121360.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:依赖   仓库   版本   插件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图