Maven不会吮吸。 。 。 但是Maven文件会

我不会参加整个Maven辩论,但是可以说我是所有最佳实践的有力支持者,对我而言,Maven是最佳实践的体现。 我的意思是说,Maven是围绕特定的最佳实践构建方法构建的。 注意,我说了一种特定的最佳实践构建方法。 在现实世界中,有不止一种构建方法可以胜任最佳实践,但是Maven假设其中只有一种。 这并不意味着其他人都不好,而只是意味着如果您使用Maven,则需要接受其假定的约定 。 。 。 或受苦。 对于任何“约定优于配置”(CoC)工具来说都是如此,并且Maven是相当糟糕的CoC。

像所有设计模式一样,Maven是构建软件过程的可重用解决方案。

我认为偶尔讨论的Maven作为构建设计模式的概念是一个强有力的隐喻。 它很有用,因为它强调Maven与所有设计模式一样,是构建软件过程的可重用解决方案。 这是一个最佳实践解决方案,经过多年的大量使用,这些社区已经由聪明人改进。 利用设计模式构建软件的最明显好处与编写软件的好处相同。 即:

  • 您无需手动编写即可获得大量功能
  • 了解适用于一个项目的模式的工程师可以立即了解适用于另一项目的模式。

名义上,第一个是生产力,第二个是简单。 显然,每个人都希望提高生产力,即用更少的代码行完成更多工作。 但是,我实际上认为第二点-简单-更为重要。 我认为,整个工程领域可以归结为“管理复杂性”的概念。 就复杂性而言,我直接指的是当您被成堆的意大利面条代码轰炸时感到的头痛。 设计模式通过以较高级别的注释密封大量的复杂性,有助于消除这种智力上的矛盾。 万一您忘记了,这就是我们腾出更多精力处理不可避免地驻留在下一个级别上的更大更酷的任务的原因。

正是这种观点使我将学习新项目的临时构建列为职业中最烦人的方面之一。 即使非常干净地实施了ant或make build,遵循了本地化的最佳实践,并且自动化了软件生命周期的广泛范围,它仍然会用大量的原始数据(即脚本行)来惩罚新开发人员。 请注意,这只是临时性 。 当然,这并不是敲响这些工具。 ant尤其擅长自动化任务并提供可重用的构建小部件集。 但是,它无助于为构建软件的整个过程提供可重用的解决方案,因此,它也无助于新开发人员轻松理解其构建过程。

对于像Maven这样的CoC工具,最重要的约定是

因此,正如我所看到的,对于像Maven这样的CoC工具,最重要的是约定。 为了成功使用Maven,您必须了解并遵循假定的约定。 不遵循约定的项目很快就会与Maven发生冲突。 首先,他们很难使用一种假定自己的构建过程的工具来实现自己的构建过程。 您很容易就无法轻松完成自己所做的事情而感到不安,但是前面的段落旨在表明实际上是您需要改变的人,至少在您打算继续使用Maven的情况下。 选择Maven时,您需要接受约定。 我不能,我建议您坚持使用Ant,它足够灵活,可以按您的条件满足您。 请记住,您正在失去利用Maven的设计模式方面来管理构建复杂性的能力。 如果您认为自己的构建没有复杂性问题,请向自己提出以下问题:

  • 我们团队中的每个工程师都可以轻松构建我们软件系统的所有组件吗?
  • 我们的工程师有信心修改构建脚本而不会感到焦虑吗?
  • 当需要有人解决构建问题时,我们的工程师会逃离房间吗?

因此,如果您到目前为止与我在一起,您可能会同意遵循Maven假定的惯例是进入Maven必杀技的关键先决条件。 这就是导致我得出Maven文档糟糕的结论的原因。 它们不仅不足,而且可能有害。 他们大多记录了配置,而根本没有提到约定的关键主题。 我认为对配置的强调在很大程度上是偶然的,这使新手认为配置Maven是可以的,甚至是正常的。

Maven文档不仅不足,而且可能有害。 它主要记录了配置,而根本没有提到约定的关键主题。

通过文档,我主要是指访问Maven或Codehaus插件页面时发现的所有内容。 例如,考虑极核心的maven-assembly-plugin。 浏览Maven网站上的文档 ,您会发现它几乎完全与配置有关。 正如我已经陈述和重申的那样,问题是您真的不想配置Maven。 您想遵循约定。 配置应仅是最后的选择。

插件放东西,然后下一个插件找不到那个东西。 使用配置文件告诉Maven在哪里可以找到东西,然后没有该配置文件,其他任何人都找不到该东西。 配置Maven会使您陷入配置反馈循环中,并且配置的几何增长不会使其具有pom可读性。 即使可以通过配置Maven使Maven满足您的需要,您也会很快得到一个难以理解的构建。

使用配置更改一个插件放置东西的位置,然后下一个插件找不到该东西。

因此,请避免配置! 相反,请遵循常规路径。 您的工程师会知道并喜欢他们的构建,并且您将轻松利用Maven生态系统提供的许多好处-从丰富的插件库到存储库服务器和构建服务器。

但是如何学习Maven约定呢? 这全都与社区有关。 幸运的是,这是一个非常友好的社区。 这是我在尝试确定应如何在Maven中完成工作时使用的一些最重要的资源。

  • Sonatype博客
  • 堆栈溢出
  • Maven用户列表

此外,为了成为一个友好的社区成员,我正在使用此博客条目作为一系列Maven条目的介绍。 这些条目中的每一个都会概述重要的Maven约定。 我将详细介绍约定并提供示例poms。 因此,如果您想了解Maven约定,请保持联系。

参考: Maven不吸。 。 。 但是我们的W4G合作伙伴 Chad Davis 的Maven Docs Do来自zeroInsertionForce博客。


翻译自: https://www.javacodegeeks.com/2012/04/maven-does-not-suck-but-maven-docs-do.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5 游戏制作教程,html5一步步实现超级玛丽游戏制作(新手教程源码)

【实例简介】【实例截图】【核心代码】My first Gamebody {border:none 0px;margin:0px;padding:10px;font-size : 16px;background-color : #f3f3f3;}canvas {border : 1px solid blue;}// 页面初始化函数function init(){//加载图片,并存入全局变量 ImgCache,// 加载完成后,调…

同步与异步的概念

进程同步用来实现程序并发执行时候的可再现性。 一.进程同步及异步的概念 1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起…

编写Play 2的模块,第1部分:使工作正常

几周前,我迁移了Play! 框架 1.x版本的Deadbolt应用于Play 2平台,并且对缺少有关创建模块的信息感到惊讶。 Play 1.x文档中详细介绍了该主题,这使得创建模块非常简单。 显然,需要做些事情-这是关于为Play 2创建模块和插…

Dotnet Core

Global Exceptionhttp://www.talkingdotnet.com/global-exception-handling-in-aspnet-core-webapi/转载于:https://www.cnblogs.com/zwheui/p/6339692.html

交友系统设计:哪种地理空间邻近算法更快?

小熊学Java:https://javaxiaobear.cn 交友与婚恋是人们最基本的需求之一。随着互联网时代的不断发展,移动社交软件已经成为了人们生活中必不可少的一部分。然而,熟人社交并不能完全满足年轻人的社交与情感需求,于是陌生人交友平台…

linux ntp 'ntp_request.c'远程拒绝服务漏洞,NTP 'ntp_request.c'远程拒绝服务漏洞

NTP ntp_request.c远程拒绝服务漏洞发布日期:2013-12-30更新日期:2014-01-09受影响系统:NTP NTP 描述:--------------------------------------------------------------------------------BUGTRAQ ID: 64692CVE(CAN) ID: CVE-20…

指针的内容 ; 指针的地址 指针所指向的内容 指针的类型 指针所指向的类型...

这几个个东东很具有迷惑性。 int a10; //假设a的地址是 0x0000004C int *p; //假设p的地址是 0x0035FA94 p&a; 指针的内容:指针里面存放的是地址。 指针p里面存放的是a的地址(&a)。即指针p里面存放的内容是0x0000004C。 指针的地址&#xff…

Apache Camel教程– EIP,路由,组件,测试和其他概念的简介

公司之间的数据交换增加了很多。 必须集成的应用程序数量也增加了。 这些接口使用不同的技术,协议和数据格式。 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持。 企业集成模式(EIP)[1]中存在…

iOS开发UI篇—UITableview控件简单介绍

一、基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 。 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UIScrollView,因此支持垂直滚动,⽽且性能极佳 。 UITableview有分组和不分组两种样式,可以在storyboard或…

PL/SQL 08 异常 exception

--PL/SQL错误 编译时 运行时--运行时的出错处理 EXCEPTION --异常处理块DECLARE …BEGIN …EXCEPTION WHEN OTHERS THEN handler_error(…);END; --用户自定义的异常DECLARE e_TooManyStudents EXCEPTION; …BEGIN … RAISE e_TooManyStudents; …EXCEPTION WHEN e_TooMany…

html鼠标事件没反应,鼠标有时候点击没反应怎么解决

关于鼠标有时候点击没反应的问题,一些网友显得一头雾水,那这该怎么解决呢?下面就由小编来给你们说说鼠标有时候点击没反应的原因及解决方法吧,希望可以帮到你们哦!鼠标有时候点击没反应的解决方法一:一,系统繁忙&…

动态ADF火车:以编程方式添加火车停靠站

我将展示如何以编程方式“即时”将火车停靠站添加到ADF火车中。 在我的用例中,我有一些票务预订应用程序。 它具有训练模型的有限任务流。 在火车的第一站,用户输入乘客的数量,在随后的站点,他们输入一些乘客的信息。 带有乘客信息…

修改sqlserver的数据库排序规则语句

alter database SOETMS collate Chinese_PRC_CI_AS 转载于:https://www.cnblogs.com/lxboy2009/p/5481977.html

关于存储过程权限

关于ORACLE账号的权限问题,一般分为两种权限: 系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、创建存储过程等 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等 像这种查…

宁波镇海2021年高考成绩查询,最新!2021年,宁波镇海区的这14所中小学“爆了...

宁波镇海区教育局发布了2021年公办学校小学一年级、初中一年级招生第一次预警,这也是宁波首个发布2021年公办学校招生预警的县、市、区。根据最新数据摸排,宁波镇海区有8所小学红色预警、2所初中红色预警,1所小学黄色预警、3所初中黄色预警。…

用Java解决生产者-消费者问题

当我们尝试多线程编程时,生产者-消费者问题是最常见的问题之一。 尽管不像多线程编程中的其他一些问题那样具有挑战性,但是错误地实现此问题可能会造成应用程序混乱。 生产的物品将不使用,开始的物品将被跳过,消耗量取决于生产是在…

哪位科学家奠定了计算机结构理论,计算机等级考试一级理论知识选择题题库(1-50)...

领域中的问题为主的数值计算称为科学计算B)计算机应用可分为数值应用和非数值应用两类C)计算机各部件之间有两股信息流,即数据流和控制流D)对信息(即各种形式的数据)进行收集、储存、加工与传输等一系列活动的总称为实时控制答案:D32. 金卡工程是我国正在…

axios 参数为payload的解决方法

1. 添加头部headers headers: {Content-Type: application/x-www-form-urlencoded,}, axios.post(url, {a: 1, b:2}, {headers: {Content-Type: application/x-www-form-urlencoded,}, }).then(response > response.data).then(err > {console.log(err);}); 2. 在Browser…

超出了GC开销限制– Java堆分析

这篇文章是我们原来的GC超出限制的问题模式帖子的延续。 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要。 如果您不熟悉此Java HotSpot 1.6错误,建议您首先阅读有关此主题的第一篇文章 。 本文将为您提供一个示例程序和一个教程&…

开灯问题

开灯问题 时间限制:3000 ms | 内存限制:65535 KB难度:1描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按…