10个使用Maven的有效提示

640?wx_fmt=gif

点击蓝字,关注Java高级部落


毫无疑问,Maven是Java生态系统中最流行的软件项目构建自动化工具。长期以来,它已经取代了Ant,这归功于一个更简单和声明性的项目管理模型,提供了依赖关系管理和解决方案,以及定义良好的构建阶段,例如compile和test,以及对插件的支持,这些插件可以执行与构建、配置和部署代码相关的任何操作。


640?wx_fmt=jpeg


多年来,许多使用场景和命令对我在基于Maven的项目中非常有用。以下是一些有助于更有效地使用Maven的使用技巧。还有更多的东西,很明显,人们每天都可以为一个特定的用例学习一些新的东西,但我认为这些是可以普遍应用的。这里的重点是命令行使用、解决某个问题或简化重复任务等方面。因此,您将不会发现像使用dependencyManagement来集中依赖关系,这是相当基本的,并且在最初组成POM时更多地使用。



1

获取项目的依赖树

这是一个不费脑筋的问题,但它是解决依赖相关问题的关键,例如使用错误的版本。它在dependency:tree目标maven-dependency-plugin。只需运行以下命令行即可显示当前项目中使用的所有依赖项的树(可选地使用less若要滚动结果,假设您正在处理一个足够大的项目):

640?wx_fmt=png

注意,在像Eclipse这样的IDE中,这种依赖关系的层次结构可以在POM编辑器中可视化。例如,在Eclipse中,它可以在POM编辑器的“依赖层次结构”选项卡上查看。



2

分析属地

在POM中声明项目实际使用的依赖项是很好的做法,而且通常您希望显式声明项目使用的依赖项,即使它们是过渡性。这使POM变得更干净,就像删除未使用的导入并为您在Java代码中使用的类型声明这些导入一样。


要做到这一点,要么运行dependency:analyze目标作为一个独立的命令:

640?wx_fmt=png

每当插件发现POM中声明的未使用的依赖项或未声明的已使用依赖项时,输出中都会显示警告。如果由于此原因需要引发构建失败,则参数failOnWarning可以设置为true:

640?wx_fmt=png

另一种方法是使用dependency:analyze-only目标,它做同样的事情,但它应该在构建生命周期中使用,也就是说,它可以集成到项目的POM中:

640?wx_fmt=png



3

在本地构建期间跳过测试

在开发机器上构建项目时,您可能希望跳过现有的单元测试和集成测试,这可能是因为您希望更快地构建代码,或者因为您暂时不关心测试。也许你只想在你觉得你的提交的第一个草稿准备好接受测试之后才运行测试。请注意,这绝不应在构建并部署到生产环境或暂存环境的CI/CD机器上完成。


有两个备选方案需要考虑:

1. 跳过测试的运行:你可以用mvn package -DskipTests=true。或者,您可以将该属性缩短为-DskipTests.

2. 跳过测试的编译和运行(不建议):你可以用mvn package -Dmaven.test.skip=true。你可以把财产缩短到-Dmaven.test.skip.


后者跳过了与测试相关的整个任务(编译和运行测试),因此它可能使构建速度稍微快一些,但-DskipTests而是建议,因为它允许您检测在编译时破坏测试的更改。这通常很重要,因为早期发现和修复错误可能最终需要对主代码中的更改进行重新迭代,或者进行一些重构以使代码更易于测试。


考虑并行运行测试,如安全插件文档。这是一个更好的长期解决方案,但代价是您应该确保并行测试是独立的,不会导致并发问题,因为它们将共享相同的JVM进程。



4

调试单元测试

上述属性由maven-插件,负责运行单元测试。在test构建生命周期的阶段。有时,您不希望在IDE中调试失败的测试,因为您和我一样,并不总是相信IDE是使用新的更改运行测试。有时,您有一个命令行窗口,只想坚持它。在这种情况下,将一个属性传递给插件,如下所示:

640?wx_fmt=png

这将导致插件侦听端口5005上的远程调试器。现在,你可以在IDE中配置远程调试连接到侦听插件并在调试模式下执行测试。


如果您需要对集成测试进行同样的测试,只需使用以下属性即可。-Dmaven.failsafe.debug相反。名称来自maven-failsafe-plugin,负责运行集成测试。



5

运行特定测试

因此,您调试了一个失败的测试并修复了这个失败,现在,您希望重新运行它以确保它是成功的。若要告诉“尽命之火”只运行该特定测试,则test参数可以在命令行上传递:

640?wx_fmt=png

根据的文件test目标的插件,test参数可用于进一步控制要执行的特定测试方法:

640?wx_fmt=png



6

从项目中恢复生成

我犹豫不决是否包括这个,因为它看起来微不足道,Maven通常在构建失败时将它指向用户,但我认为它仍然值得列出。每当生成中发生错误,并修复它并希望重新运行生成时,选项-rf,后面跟着冒号和失败模块的名称,可以用于从失败模块恢复生成,以避免重新构建已经成功构建的模块:

640?wx_fmt=png



7

有效POM

与在您的多模块项目中以不同级别导航多个POM文件和/或在依赖项本身中定义的POM文件不同,相反,一个简单的命令可以显示由当前POM的整个配置快照组成的有效POM,包括从父POM继承的信息,例如属性、插件、依赖信息和配置文件等属性、插件、依赖关系信息和配置文件。

640?wx_fmt=png

在Eclipse中,可以通过单击默认POM编辑器中标有“有效POM”的底部选项卡查看它。



8

构建特定模块及其依赖关系

对于具有许多依赖模块的多模块项目,您可能希望显式地指定要构建哪些模块,而忽略其他模块。例如,您只想构建一个或两个与其依赖关系一起工作的模块,而不是构建整个模块列表。而不是仅仅做mvn clean install在聚合器POM中,可以使用-pl命令行选项。例如,只构建模块db-impl,您可以执行以下命令:

640?wx_fmt=png

选择-am,简称--also-make中的列表所需的项目。-pl.



9

配置JVM内存

在构建项目之前,Maven将分析其模块层次结构,以构造一个依赖关系图,该图指定构建这些单独模块的顺序。有时,这个分析步骤可能需要比分配给Maven的JVM进程的默认内存更多的内存,从而导致Java堆空间错误。若要配置这些内存设置,请将MAVEN_OPTS可以设置环境变量:

640?wx_fmt=png



10

调试Maven插件

由于Maven具有丰富的插件生态系统,而且开发自定义插件很容易,因此开发人员可能需要调试这些插件的问题。如果将插件的源代码导入到IDE中,则可以在调试模式下使用mvnDebug可执行文件(例如:mvnDebug clean install),Maven将等待IDE中的远程调试器附加到端口8000上。



11

结语

了解像Maven这样的构建工具如何工作对于充分利用它是至关重要的,但是有些用例经常重复它们自己的地方,值得记住这些快速解决方案。如果您有任何其他提示,欢迎在下面的评论中让我们知道!



Java

高级部落

长按扫码关注我们

640?wx_fmt=jpeg


640?wx_fmt=gif

点击原文,加入Java开发交流群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值