为什么是行家?有什么好处? [关闭]

2023-12-01

与 ant 相比,使用 Maven 的主要好处是什么? 它似乎更像是一种烦恼,而不是一个有用的工具。 我使用 maven 2、普通 Eclipse Java EE(无 m2eclipse)和 tomcat。

maven的支持者认为

  1. Maven 让您轻松获取包依赖项

  2. Maven 强制你有一个标准的目录结构

在我的经验中

  1. 弄清楚包依赖关系实际上并不难。无论如何,你很少这样做。可能在项目设置期间一次,在升级期间几次。使用 Maven,您最终将修复不匹配的依赖项、编写错误的 poms 以及无论如何进行包排除。

  2. 缓慢的“修复-编译-部署-调试”周期会降低生产力。这是我的主要抱怨。您进行更改后,您必须等待 Maven 构建启动并等待其部署。没有任何热部署。

或者我只是做错了?请给我指出正确的方向,我洗耳恭听。


弄清楚包依赖关系实际上并不难。无论如何,你很少这样做。可能在项目设置期间一次,在升级期间几次。使用 Maven,您最终将修复不匹配的依赖项、编写错误的 poms 以及无论如何进行包排除。

对于玩具项目来说,没那么难。但我从事的项目有很多,真的很多,我很高兴能够传递它们,为它们制定标准化的命名方案。手动管理所有这些将是一场噩梦。

是的,有时您必须致力于依赖性的收敛。但仔细想想,这不是 Maven 固有的,这是任何使用依赖项的系统所固有的(我在这里谈论的是一般的 Java 依赖项)。

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

另一方面,Maven 支持依赖管理,并将为我传递地检索它们,并为我提供管理复杂性所需的工具依赖管理固有的:我可以分析依赖树,控制传递依赖中使用的版本,排除其中一些if需要,控制跨模块的收敛等。没有什么神奇的。但至少你有支持。

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

缓慢的“修复-编译-部署-调试”周期会降低生产力。这是我的主要抱怨。您进行更改后,您必须等待 Maven 构建启动并等待其部署。没有任何热部署。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么是行家?有什么好处? [关闭] 的相关文章

  • 如何在会话失效后强制 Jetty 通过 BASIC 身份验证请求凭据?

    我使用 jetty 6 1 22 和 BASIC 身份验证作为我的登录机制 我第一次登录网络应用程序时 浏览器会请求用户名和密码 如果尝试使用 session invalidate 注销 会话将失效 但凭据会被缓存 这意味着 如果我尝试连接
  • Hibernate UserType 和定义的长度

    我有一个休眠用户类型 如下所示 public class UUIDHibernateType implements UserType private static final int SQL TYPES new int Types CHAR
  • 如何为 Runnable 分配方法引用值

    我有一个关于 Java 8 的问题Runnable public static void main String args Runnable r1 Test t1 Runnable r2 Test t2 Runnable r3 Test t
  • 使用 Smack 库解析 XMPP 的 EventElement

    任何人都可以帮助向我展示如何解析此事件 pub 元素并获取以下数据包的消息对象 也许我的关键字 搜索词谷歌搜索不正确 但我在寻找有关此问题的文档或教程时找不到任何有用的东西 我读过一些有关 PacketParserUtils 和 XmlPu
  • 如何在netbeans(Java Swing)中查看同一JFrame中包含许多子jPanel的另一个jPanel

    我想通过按钮事件操作显示另一个 jPanel 例如 private void jButtonMouseClicked MouseEvent e getContentPane removeAll update getGraphics code
  • 如何从命令行构建 .csproj 将日志写入指定位置?

    虽然 无日志 构建似乎可以顺利地与类似的东西一起工作 c Program Files Microsoft Visual Studio 9 0 Common7 ide VCSExpress Project1 csproj build 以下失败
  • javax.net.ssl.SSLHandshakeException

    最近 我们的一个 Java 应用程序遇到了问题 该应用程序试图运行受 SSL 保护的 amazone 负载均衡器 Web 服务 该服务的证书由 GoDaddy 签名 我们没有将公钥证书链文件 PEM 编码 的内容复制并粘贴到 证书链 框中
  • 部署 Maven 项目抛出 java.util.zip.ZipException: invalid LOC header (badsignature)

    当我运行我的程序时 出现以下异常mvn install 我什至删除了本地存储库并再次运行 得到相同的异常 错误 未能执行目标 org apache maven plugins maven shade plugin 2 1 shade 默认
  • 在 R 上使用 Java 16 运行 H2O

    我使用 R 命令安装了 h2o install packages h2o 这促使我安装了最新版本的 Java 我安装了 版本 16 一切都运行得很好 除了在启动时 h2o 会提醒我从 h2o ai 网站安装最新版本的 h2o 因为该版本是用
  • 在 java GUI 中更新 JTree

    我在 GUI 中使用了 JTree 并将其添加到 JFrame 中 当我想更新它并更改程序另一部分中的节点时 当程序运行时 作为执行的操作 我尝试添加新节点或删除节点 但我的界面没有改变 请给我建议一个解决方案 regards 除了 ins
  • 输入流的问题

    以下是我将在我的项目中使用的代码片段的一部分 public String fetchFromStream try int charVal StringBuffer sb new StringBuffer while charVal inpu
  • C++ 将 HashMap 对象返回给 Java

    我有一个 JAVA 调用的 JNI 函数 需要构建并返回一个 HashMap 映射的键是 String 相应的值是 boolean 或 Boolean 任何一个都可以 只要它有效 使用我当前的代码 如下 该字符串已成功添加到返回的映射中 并
  • Java Socket/Serversocket WAN 连接

    我试图用我的计算机创建一个服务器 以便他们的计算机上的客户端可以与我的计算机连接和通信 我在端口 31350 上创建了服务器 客户端尝试通过我的路由器的 IP 地址进行连接 但只有当我在套接字创建参数中有 localhost 或我的计算机名
  • 除了 Javadoc 之外,JDK 类还有其他规范吗?

    除了 Javadoc 之外 JDK 类还有其他规范吗 如果是的话 在哪里 例如 考虑Collections unmodifiableMap 它的Javadoc https docs oracle com javase 8 docs api
  • 使用 Java 根据本地 DTD 文件验证 XML 文件

    如何根据本地存储为文件的 DTD 验证 XML 文件 XML 文件没有任何 DOCTYPE 声明 或者可能有一个应该被覆盖的声明 我看了一下这个线程 https stackoverflow com questions 470313 net
  • 如何映射“根”Servlet 以便其他脚本仍然可以运行?

    我正在尝试构建一个调用 JSP 页面的 Servlet 类似于以下内容 public void doGet HttpServletRequest req HttpServletResponse resp throws IOException
  • 我们如何在Android中动态更改Android应用程序图标[重复]

    这个问题在这里已经有答案了 我知道活动图标也被问过同样的问题 但我的问题有点不同 我只是想知道我们是否可以以编程方式设置应用程序图标 我不是要求更改 我只是要求设置它 我希望我说清楚了
  • 让 Jsoup 支持通过 JavaScript 动态生成 html

    现在我正在开发一个网络爬虫 这个应该解析一些特定的站点并将输出输出到 xml 文件中 到目前为止 没有问题 Crawler 可以工作 您可以通过 cfg 文件快速自定义它 我使用 Jsoup 来解析 HTML 内容 我刚刚添加了几个站点 发
  • 从父类返回子类

    我有一个构建器类 它从大多数方法返回自身以允许菊花链 为了使此功能适用于子类 我希望父方法返回子类的实例 以便子方法可以链接到末尾 public class BaseBuilder
  • JBoss Weld + java.lang.OutOfMemoryError:永久代空间

    我刚刚切换到 Weld 以利用 CDI JSF 2 Beans 对话范围 这是我的 Maven 依赖项

随机推荐

  • Jquery 根据输入值显示输入文本

    我的 jquery 面临着基于输入值显示输入文本的问题 这是 JS 小提琴演示 http jsfiddle net Ltapp 364 当我尝试输入 hotmail时 输入框会显示 但是当我想在 hotm输入框中输入一些文本时 它会再次隐藏
  • 如何隐藏折线图中数据点的标签

    请参考下图 基本上我有一个 C 图表控件 上面有一些系列 我有一个带标签的系列 图中的红线 但我希望能够打开 关闭标签 那可能吗 我找不到任何可以这样做的属性 多谢 缺少清除文本labels一种简单的方法是使颜色透明 你可以为整体做到这一点
  • Cocoa - loadNibNamed:owner:topLevelObjects: 来自加载的包

    在基于文档的 Cocoa 应用程序中 我使用以下方法实例化外部包中的多个对象 插件 NSMutableArray getPluginsOfType Class type NSBundle main NSBundle mainBundle N
  • 没有 jQueryUI 的 jQuery 模态对话框 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想知道如何实现带有背景覆盖的模式对话框 使用 jQuery 而不使用 jqueryUI 插件 有很多 jQuery 插件可以为您处理模式窗口 就我个人而言 我用过简单模态取得了
  • Task.Run 具有取消支持

    考虑this Task Run example 它展示了如何创建支持取消的任务 我正在做类似的事情 Task Run gt while token IsCancellationRequested token 我的问题 既然我已经有了对取消令
  • 有什么方法可以强制在 NSArray、NSMutableArray 等上进行输入吗?

    我可以做一个NSMutableArray实例 其中all元素属于类型SomeClass 还没有人把它放在这里 所以我会这样做 Objective C 现已正式支持这一点 从 Xcode 7 开始 您可以使用以下语法 NSArray
  • 使用包含 $0 的动态字符串替换文本时遇到问题

    我在用Regex替换模板中的所有字符串 一切正常 直到出现一个我想要替换的值 即 0 00 我似乎无法正确更换 0作为替换文本 我得到的输出是 Project Cost ProjectCost 00 知道为什么吗 这是带有一些简化变量的代码
  • 如何使用 Gremlin 选择可选的图形结构?

    我正在使用 Gremlin 查询存储在 TitanDB 中的图表 该图包含具有属性 例如 描述 的用户顶点 以及表示用户之间关系的边 我想使用 Gremlin 来获取 1 按属性的用户以及 2 与其他用户的可能关系 例如 我可以使用以下查询
  • 如何将 taglibs JSTL/core 与 WEB-INF 文件夹中的 JAR 一起使用

    目前 我已经使用 JSP 页面顶部的以下标记设置了标记库并正常工作 在 Maven 中我有依赖项
  • Azure SQL 数据库在本地运行时可以工作,但在发布到 Azure 时则无法工作

    这几天来一直困扰着我 但我就是无法解决 我按照在线教程向您展示了如何使用实体框架中的模型优先方法连接和使用 Azure 数据库 这样 您必须设置数据库迁移 以便在将网站发布到 Azure 时更新 Azure 数据库 我已经在 Azure 上
  • 如何使直方图中的标签响应动态用户输入

    我有以下工作代码 它获取输入数据并根据阈值显示直方图 如果您运行下面的代码 则该代码可以正常工作 当您拖动滑动条时 直方图会发生变化 然而标签26 GENES当我们拖动阈值时不会改变 从 1 5 到 2 我预计值会更改为30 GENES 这
  • Dart 中的异步编程

    我与java有关如何执行线程 异步 我使用 new Thread target start 其中 target 是 Runnable 作为在 java 中执行线程的一种方法 新的并发 api 有替代方案 但我们知道在特定调用时会创建新线程并
  • 将 UI 定位到鼠标位置(使工具提示面板跟随光标)

    我制作了一个跟随光标的工具提示面板 void Update this transform position Input mousePosition 在更新功能中 The panel lags behind moving to cursor
  • 仅当重定向到管道或文件时,awk 才没有输出[重复]

    这个问题在这里已经有答案了 我有一个相当简单的脚本 在向每一行添加时间戳后从 tty 打印内容 它在命令行上输出得很好 但是使用以下命令重定向输出 gt 不起作用 为什么不 这是脚本 bin bash awk print strftime
  • Express 中绝对路径和相对路径的困难

    我在 Express 应用程序中有一个 API 路线 如下所示 app get username bookmark function req res do stuff 正如预期的那样 该路由解析为 GET username bookmark
  • C# 列表分组并赋值

    我有一份订单清单 此列表包含同一商品的多个订单 请参阅下表 然后我想为每个相同的项目 即 ABC 分配相同的块 ID 因此 ABC 的块 ID 为 1 每个 GHJ 的块 ID 为 2 等等 最好的方法是什么 目前 我按订单 ID 对列表进
  • 从本地系统获取当前位置区域[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我需要获取国家 城市 例如 America New York 从我的本地系统使用 time 包中的 LoadLocation value string 提供给 api 如何在不使用任何
  • 如何使用imageEdgeInsets更改UIButton中图像的tintColor?

    我的 Objective C 应用程序中有一个 UIButton 我的按钮经过修改 添加了文本和图像 例如 void centerButtonAndImageWithSpacing CGFloat spacing CGFloat inset
  • ISBN -> bookdata 查找填写数据库

    好的 我想为一个小型图书馆建立数据库 我对数据库的经验有限 并且没有从网络服务器查询的经验 我想要检索标题 出版商 也许是作者 描述等信息 我能想到的最简单的方法是通过 ISBN 查找它们 我以前接触过 isbndb com 但访问它的 A
  • 为什么是行家?有什么好处? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 与 ant 相比 使用 Maven 的主要好处是什么 它似乎更像是一种烦恼 而不是一个有用的工具 我使用 maven 2 普通 Eclipse Java EE 无 m2eclipse 和