java maven有什么用,java - 为什么maven? 有什么好处?

java - 为什么maven? 有什么好处?

与让我们说蚂蚁相比,使用maven的主要好处是什么?它看起来更像是一种烦恼而不是一种有用的工具。我使用maven 2,使用普通的Eclipse Java EE(没有m2eclipse)和tomcat。

maven的支持者相信这一点

Maven可以让您轻松获得包依赖性

Maven强制您拥有标准的目录结构

在我的经验中

弄清楚包依赖关系并不是那么难。 无论如何你很少这样做。 可能在项目设置期间一次,在升级期间更多。 使用maven,你最终会修复不匹配的依赖关系,写得不好的poms以及无论如何都要进行包排除。

缓慢的FIX-COMPILE-DEPLOY-DEBUG循环,可以降低生产率。 这是我的主要抱怨。 你做了一个改变,你必须等待maven build进入并等待它部署。 没有任何热门部署。

或者我只是做错了? 请指出正确的方向,我全都耳朵。

9个解决方案

106 votes

弄清楚包依赖关系并不是那么难。 无论如何你很少这样做。 可能在项目设置期间一次,在升级期间更多。 使用maven,你最终会修复不匹配的依赖关系,写得不好的poms以及无论如何都要进行包排除。

对玩具项目来说并不难。 但是我工作的项目中有很多很多,我很高兴能让它们过渡,为它们制定标准化的命名方案。 手动管理所有这些将是一场噩梦。

是的,有时您必须致力于依赖性的融合。 但想想它两次,这不是Maven所固有的,这是任何使用依赖关系的系统所固有的(我在这里谈论的是Java依赖关系)。

所以使用Ant,你必须做同样的工作,除了你必须手动完成所有事情:抓住项目A及其依赖项的某个版本,获取项目B及其依赖项的某些版本,弄清楚自己使用的确切版本,检查 它们没有重叠,检查它们是否不相容等等。欢迎来到地狱。

另一方面,Maven支持依赖管理,并将为我传递它们,并为我提供管理依赖管理固有的复杂性所需的工具:我可以分析依赖树,控制传递依赖中使用的版本,排除一些 如果需要,他们控制跨模块的融合等。没有魔力。 但至少你有支持。

并且不要忘记依赖管理只是Maven提供的一小部分,还有更多(甚至没有提到与Maven很好地集成的其他工具,例如Sonar)。

缓慢的FIX-COMPILE-DEPLOY-DEBUG循环,可以降低生产率。 这是我的主要抱怨。 你做了一个改变,你必须等待maven build进入并等待它部署。 没有任何热门部署。

首先,你为什么这样使用Maven? 我不。 我使用我的IDE编写测试,代码直到它们通过,重构,部署,热部署并在我完成之前运行本地Maven构建,然后提交,以确保我不会破坏连续构建。

其次,我不确定使用Ant会让事情变得更好。 根据我的经验,使用二进制依赖项的模块化Maven构建比典型的单片Ant构建提供了更快的构建时间。 无论如何,看看Maven Shell是否已准备好(重新)使用Maven环境(顺便说一句,它很棒)。

所以最后,我很遗憾地这么说,并不是真的Maven会扼杀你的生产力,而是你误用了你的工具。 如果你对它不满意,那么,我能说什么,不要使用它。 就个人而言,我从2003年开始使用Maven而且我从未回头。

Pascal Thivent answered 2019-06-07T20:36:39Z

20 votes

Maven可以被视为完整的项目开发工具,而不仅仅是像Ant这样的构建工具。您应该使用带有maven插件的Eclipse IDE来解决所有问题。

以下是Maven的一些优点,引用了使用Maven页面的好处:

亨宁

快速项目设置,没有复杂的build.xml文件,只是一个POM和去

项目中的所有开发人员都使用相同的jar依赖项   集中式POM。

为“免费”项目获取大量报告和指标

减少源分布的大小,因为罐子可以   从中央位置拉出来

伊曼纽尔维尼斯

有很多目标,所以没有必要开发一些   具体的构建过程部分相反   对于ANT,我们可以重用现有的ANT任务   在使用antrun插件的构建过程中

杰西麦克康纳

促进代码的模块化设计。 通过简化管理多种方式   它允许设计的项目   布局成多个逻辑部分,   将这些零件编织在一起   在pom中使用依赖性跟踪  文件。

强制执行代码的模块化设计。 很容易支付lipservice模块化   代码,但代码是分开的   编译项目是不可能的   交叉授粉之间的参考   代码模块,除非你   特别允许在你的   依赖管理......没有   “我现在就做这件事并解决它   后来的'实施。

明确宣布依赖管理。 与依赖   你必须尝试的管理机制   搞砸你的罐子   版本化...没有   '哪个版本的经典问题   这个供应商的罐子是这个吗? 并设置   它在一个现有的项目上撕裂了   如果它存在的混乱   你被迫做的时候就存在了   存储库中的“未知”版本   把事情搞定......或那个   骗你自己,你知道   ABC.jar的实际版本。

强类型生命周期有一个强大的生命周期,一个   软件系统来自于   建立到底的建设......   并且允许用户混合和   将他们的系统与生命周期相匹配   而不是拼凑自己的   生命周期..这还有额外的   允许人们搬家的好处   从一个项目到另一个项目并发言   使用相同的词汇表   软件构建

文森特马索尔

更大的动力:Ant现在已经成为传统,并没有快速前进。 Maven是   快速前进并且有一个   有很多高价值的潜力   Maven周围的工具(CI,Dashboard   项目,IDE集成等)。

YoK answered 2019-06-07T20:38:45Z

10 votes

找出小项目的依赖关系并不难。 但是一旦你开始处理具有数百个依赖关系的依赖树,事情很容易就会失控。 (我是根据这里的经验说的......)

另一点是,如果您使用具有渐进式编译和Maven支持的IDE(如Eclipse + m2eclipse),那么您应该能够设置编辑/编译/热部署和测试。

我个人不这样做,因为我过去因为糟糕的经历(Maven之前)而不相信这种发展模式。 也许有人可以评论这是否真的适用于Eclipse + m2eclipse。

Stephen C answered 2019-06-07T20:39:23Z

9 votes

Maven是你需要事先决定你喜欢它并想要使用它的工具之一,因为你将花费相当多的时间来学习它,并且做出一劳永逸的决定将允许你跳过所有类型 学习时的疑问(因为你喜欢并希望使用它)!

强大的惯例在许多地方都有帮助 - 比如Hudson可以用Maven项目创造奇迹 - 但最初可能很难看到。

编辑:截至2016年,Maven是唯一的Java构建工具,所有三个主要IDE都可以使用开箱即用的源代码。 换句话说,使用maven会使您的构建与IDE无关。 这允许例如 使用Netbeans分析,即使你通常在eclipse中工作

Thorbjørn Ravn Andersen answered 2019-06-07T20:40:01Z

9 votes

Maven优于蚂蚁的优势很多。 我试着在这里总结一下。

约定优于配置

Maven使用独特的方法进行项目布局和启动,这使得在项目中轻松跳转。 通常它只需要checkount和maven命令来获取项目的工件。

项目模块化

项目约定建议(或更好地,强制)开发人员模块化项目。 您通常不得不将项目划分为较小的子组件,而不是整体项目,这样可以更轻松地调试和管理整个项目结构

依赖管理和项目生命周期

总的来说,通过良好的SCM配置和内部存储库,依赖关系管理非常简单,您再次被迫考虑项目生命周期 - 组件版本,发布管理等。 比蚂蚁更复杂一点,但同样,项目质量的提高。

maven有什么问题?

Maven并不容易。 POM中的构建周期(完成的内容和时间)并不那么明确。 此外,一些问题出现在组件的质量和公共存储库中缺少依赖性。

对我来说,最好的方法是拥有一个内部存储库,用于缓存(和保持)依赖关系,并应用于组件的发布管理。 对于比书中的示例项目更大的项目,您将在之前或之后感谢maven

Luca Botti answered 2019-06-07T20:41:27Z

6 votes

Maven可以通过采用标准惯例和实践来加速您的开发周期,同时帮助您获得更高的成功率,从而为您的构建过程带来好处。 有关Maven如何帮助您完成开发过程的更详细信息,请参阅使用Maven的好处。

user433555 answered 2019-06-07T20:41:51Z

3 votes

Maven是一个功能强大的项目管理工具,它基于POM(项目对象模型)。 它用于项目构建,依赖和文档。它简化了像ANT这样的构建过程。 但它比ANT先进得多。Maven帮助管理 - 构建,文档,Reporing,供应链管理系统,发布,分发。 - maven repository是包含pom.xml文件的打包JAR文件的目录。 Maven在存储库中搜索依赖项。

Nikhil Pahariya answered 2019-06-07T20:42:15Z

2 votes

我从未遇到过第2点? 你能解释为什么你认为这会以任何方式影响部署。 如果maven允许您以模块化方式构建项目,实际上允许对特定层中的错误进行热修复,并允许从项目的其余部分独立开发API,例如。

您可能正在尝试将所有内容塞入单个模块中,在这种情况下,问题根本不是真正的问题,而是您使用它的方式。

Goibniu answered 2019-06-07T20:42:46Z

0 votes

这应该是一个评论,但它不适合评论长度,所以我发布它作为答案。

其他答案中提到的所有好处都可以通过比使用maven更简单的方式实现。 例如,如果你是一个项目的新手,你无论如何都要花更多的时间来创建项目架构,加入组件,编码而不是下载jar并将它们复制到lib文件夹。 如果您在您的域中有经验,那么您已经知道如何使用哪些库启动项目。 我没有看到使用maven的任何好处,特别是当它在自动执行“依赖管理”时会造成很多问题。

我只掌握maven的中级知识,但我告诉你,我没有使用maven就完成了大型项目(如ERP)。

Syed Aqeel Ashiq answered 2019-06-07T20:43:24Z

你可能感兴趣的:(java,maven有什么用)