`

(转)关于maven,做错的十件事

 
阅读更多
maven管理的java项目越来越多,令人遗憾的是在使用maven的时候,多多少少都会遇到这样那样的问题,于是会有各种各样的解决办法,下面是一个列表,列出了使用maven的误区和解决办法。
1.频繁在所有项目使用mvn install并且随时在更新
这是我见过的最常见的问题,解决了这个问题有许多的好处。在maven的文档中找不到一句对这种情况的描述,不过我坚信一句话:每个artifact在maven仓库中都有一个家。
在你的公司里,应该有一个仓库管理工具。每一个你开发的模块都应该发布到这个仓库上去。你可能会问,应该什么时候发布?答案是,每次在你的构建服务器构建之后,都需要发到仓库。我们通常都使用Hudson来做这件事情,另外还有Continuum和TeamCity也还不错。
现在,当你所有的项目都在仓库里有的时候,你的项目就不再需要不断地mvn install了。如果你修改一个模块,你只需要重建这个模块,其余依赖的模块会由maven自动从仓库中下载。
2.你和你的团队成员依靠复制.m2文件夹来解决项目里的依赖找不到的问题
这看起来很疯狂,不过这件事情经常发生。解决的办法,设置一名仓库管理员。一旦管理好了仓库,就不会再出现大家找u盘复制.m2文件夹的事情了。因为可以加速,你不应该把本地的仓库整个地删除掉,毕竟在本地读取仓库是最快的。
3. 你为了解决依赖找不到一个老版本构件的问题,把最新的pom文件修改了版本弄到了老文件里后安装
考虑到这种情况,有人把一个模块的版本从1.3-SNAPSHOT修改成了1.4-SNAPSHOT。你马上要去度假,所以呢你就不想再更新和安装1.3的版本了,而你的模块正好要依赖1.3版本的那个模块,你如何去弄到老的版本呢?嗯,你可以到处找找,在代码库里找到了这个模块的最新代码,而且版本还是1.3的,你更新了这个版本号并且进行了安装。或者你还可以把你的代码从1.4弄到1.3去,安装并祈祷能够正常工作。
我想上面的解决办法都不是很好,同样,你的公司需要一个代码仓库管理员,如果有一次1.3-SNAPSHOT成功的构建,那就应该在仓库里存在一份,问题解决。
4. 你有许多shell脚本或者是批处理文件,它们通过你的模块的target文件来产生一个zip文件
maven有方法专门做这件事情,叫做“assemblies”。他们不是最容易安装的,但是一旦你安装好了,将与maven完全无缝结合,这要比许多山寨自制的脚本要平滑得多。这些山寨的脚本有许多的问题,比如说版本开始改变,模块被移动等等。
5.你有许多的xml在pom里,目的只是复制文件到发布时的文件夹去,而且它不成很好的工作,也不轻便
这和4正好是对立的,maven看上去不是为了复制文件而构建。如果你想复制你的包(诸如war,ear,zip文件),写一个ant shell bat文件都会很简单完成。
6.你在build的时候总是呆在“checking for updates from xxx-repo”而你不知道什么原因
这是一个很让有些人很气愤的事情,往往花费太多时间去找问题所在。也许这个事情正好可以让你去喝杯咖啡。尽管如此,这个问题的一些通常原因,就是你有一个快照版本的依赖,并且在你的pom文件中有一堆的仓库列表。maven不关心哪个包去哪个仓库里取,所以看上去是从所有的仓库里更新所有的包。
如果你配置了你的maven安装时到指定的仓库里去寻找所有的包(在settings.xml里设置mirror),maven会只到这个仓库里寻找。当这个服务器在本地,将得到加速。用上仓库管理很重要,
7.如果你在release分支上写代码,你的trunk的构建将会失败(或者说是1.0-SNAPSHOT应该对所有人来说都是好用的)
有许多事情你应该记住,当给你的项目创建一个分枝的时候。其中之一是告诉你的构建服务器,并且其他模块需要修改版本为你的pom的声明。如果你忽略随后才做这事,当你想修改了分支里的代码又想在主干里开发时,你会遇到问题。
这里有一个goal在发布插件里,叫做“branch”,靠运行“mvn release:branch”,maven可以为你自动重命名pom文件里的版本号。(免责声明,我还没试过这个命令。。。目前我经常只在创建了一个release的时候才打分支,在“mvn release:perform”后使用“mvn release:prepare”)
8.整个公司内容的依赖都是以-SNAPSHOT结束
快照对开发者来说很舒服,它几乎要完成了,但是迟早,你应该要停下你的脚步,发送你的包给世人,或者是你的同事。一直呆在快照版本有许多的问题。首先它减慢了你的构建速度。因为maven不得不去检查最后的快照是不是在更新了。其次,如果你的项目依赖于一个快照版本,你很难判断是依赖哪个版本的快照。构建可能会失败,只是因为你拿到了一个更新的快照。
如果你依赖一个公司内部的模块,并且这个模块目前是好用的,那么修改所有的依赖为非快照版本后才发布,是一个不错的主意。这样我们才能知道,即使有家伙还在那个模块上疯狂写代码的时候,你的模块依旧可以构建通过,因为它依赖的是一个稳定的发布。
9.跑一下“mvn dependency:analyze”,没有使用和没有使用的依赖列表很长
这个很BT,但不知道准确依赖很危险。最大的问题是maven的传递依赖。
10.当有人发布了你使用的新版本的插件,你的构建就挂了
maven的插件不必写上版本,maven会找到最好的版本。当有新版本的插件的时候,你不必知道就会下载使用最新的。有时候,最好的判断不总是正确。根据经验,越新的越有bug。因此,明码标价写上你使用的插件的版本是有意义的

 

上文转自:http://www.54chen.com/java-ee/about-maven-10-wrong-things.html

分享到:
评论

相关推荐

    maven项目转换WEB项目

    在IT行业中,Maven是一个广泛使用的构建自动化工具,主要用于Java项目的管理。它的核心功能包括项目的构建、依赖管理和项目信息管理。然而,对于习惯于使用Eclipse IDE开发Web项目的开发者来说,Maven项目可能会显得...

    chm版本Maven教程

    maven教程,目录如下: Maven安装配置 Maven启用代理访问 Maven本地资源库 Maven中央存储库 如何从Maven远程存储库下载? Maven添加远程仓库 Maven依赖机制 定制库到Maven本地资源库 使用Maven创建Java项目 使用...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    ** Maven 概述** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多...

    Maven很Maven仓库

    【Maven很Maven仓库】这个标题暗示了讨论的核心是关于Maven以及它与Maven仓库的关系。Maven是一个在Java开发中广泛使用的项目管理和综合工具,它通过一个声明式的配置来管理项目的构建、报告和文档。Maven仓库则是...

    开源工具Maven3.9.4版本压缩包

    Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...

    使用Maven导入Maven工程的视频教程

    使用Maven导入Maven工程的视频教程 仅供学习交流! 后续会持续分享相关资源,记得关注哦! 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入...

    Maven仓库apache-maven-3.2.5

    Apache Maven 3.2.5对之前的版本做了多项改进。其中,它优化了依赖解析算法,减少了构建过程中可能出现的依赖冲突。此外,这个版本还增强了命令行界面,提供了更好的错误报告,帮助开发者更快地定位和解决问题。在...

    Windoiws的maven3.8.8

    **Windows环境下Maven 3.8.8的安装与配置** Maven是Apache软件基金会开发...以上就是关于Windows环境下安装和使用Maven 3.8.8的基本知识。通过熟练掌握这些内容,你可以更加高效地管理Java项目,享受Maven带来的便利。

    maven学校配置maven配置maven配置

    maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置maven配置...

    maven教程-maven教程-maven教程

    Maven是Java领域广泛使用的项目管理工具,它能够帮助开发者完成项目的构建、文档生成、报告、依赖管理和软件生命周期管理等工作。通过本文的介绍,我们可以了解到Maven的基本概念、安装配置、基本使用和深入应用详解...

    maven.rar apache-maven-3.5.4

    标题“maven.rar apache-maven-3.5.4”暗示了这是一个关于Maven 3.5.4版本的资源包,可能包含了Maven的二进制和源码文件。Maven 3.5.4是Apache Maven的一个稳定版本,发布于2018年,带来了许多改进和修复,旨在提高...

    Maven常用命令 Maven Maven学习

    Maven常用命令 Maven Maven学习

    maven之开源中国Maven库

    【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...

    maven的四十一种骨架罗列

    123,345,maven四十一种骨架罗列maven四十一种骨架罗列

    maven 3.8.8 解压安装版

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

    apache-maven-3.6.0_apache-maven-3.6.0_maven压缩包_maven3.6.0下载_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档。Maven 3.6.0是该工具的一个稳定版本,提供了许多改进...

    maven3.6的安装包

    ** Maven 3.6 安装与配置指南 ** Maven 是一个强大的项目管理工具,主要应用于Java开发领域。它简化了构建、依赖管理和项目生命周期的管理,通过使用一种标准化的项目对象模型(Project Object Model,POM)来描述...

    maven3.2.5安装包下载

    Maven最新版是款项目管理和构建自动化工具。Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装...

    maven plugin maven plugin

    Maven 插件是 Maven 构建系统中的一个重要组成部分,它极大地扩展了 Maven 的功能,使其能够处理各种特定的任务,如编译、测试、打包、部署等。在 Maven 中,插件是通过 Maven 插件管理系统(scm)进行管理和使用的...

Global site tag (gtag.js) - Google Analytics