8

我有一个我用Java做的副业。这是一个非常简单的网络应用程序。它在 Linux 服务器上的 Tomcat 中运行,并使用 MySQL 数据库。大部分代码是用 Spring 框架编写的。它有很多单元测试。当我在 Eclipse 中编码时。当我部署应用程序时,我会运行一些 shell 脚本来将 WAR 文件移动到 Web 服务器,进行数据库更新,并对 apache 配置进行更改。我是唯一的开发人员,现在它只部署到 1 个环境(生产),尽管有一天我可能也想要一个测试或登台环境。我通过 Eclipse 插件使用 SVN 版本控制。

我总是听说有人在他们的项目中使用 Maven。既然这么多人都在用,我就对自己说一定不错。我想在业余时间学习它。唯一的问题是我不太明白为什么要使用 Maven?我的第一段听起来像是适合 Maven 的项目吗?对于与数据库交互的项目,它是否有任何特定优势?

4

10 回答 10

11

Maven 非常适合您的项目 IMO。Maven 是一个全方位的构建和部署管理工具。它的最大优势在于它使构建脚本比功能上可比较的 Ant 文件或 shell 脚本更易于维护。

使用 maven 有很多优点,最大的优点是约定优于配置。这意味着,如果您的项目使用 Maven 目录结构进行布局,则几乎不需要任何配置来构建和运行您的 JUnit 测试。

Maven 为您带来的另一大胜利是依赖管理。您可以在称为项目对象模型 (POM) 的 Maven 配置文件中以声明方式定义项目的依赖项,并且 Maven 将所有 jar 存储在它维护的本地目录结构中。对于公开可用的工件,jar 会自动从 Maven 中央存储库下载,对于内部或专有的 3rd 方 jar,您可以使用单个命令将它们安装到您的存储库中。

除了组织这些工件并自动设置构建类路径以包含所有必要的 jar 之外,maven 还将管理依赖层次结构。这意味着如果您的项目依赖于 jar A 并且 A 依赖于 jar B,则 jar B 将自动与您的 WAR 捆绑在一起,即使您没有在构建配置中明确将其列为依赖项。

另外,从专业开发的角度来看,学习 Maven 是有意义的,因为根据我的经验,Maven 已经取代 Ant,成为开源和专有 Java 项目中首选的构建工具。

话虽如此,如果您有一个对您来说快速且可靠的构建系统,那么仅仅为了使用其他所有人都使用的相同工具而转换为 Maven 可能不值得。

于 2008-09-19T20:36:40.483 回答
8

Maven 非常适合您想做的事情。与大多数构建工具不同,maven 明智地使用约定(嗯,至少比许多其他工具更好),并且它为您提到的每个领域都有“插件”:

单元测试:maven surefire 插件

Eclipse 集成:m2eclipse

部署 WAR 文件:WAR 插件Deploy 插件

Maven 还可以帮助您在 Tomcat 上进行集成测试(如果您有的话),因为您可以使用cargo 插件启动、停止或部署战争。

无论如何,如果您打算在业余时间阅读,这里有一本免费的书(PDF 格式):Maven 权威指南

希望能帮助到你!

于 2008-09-19T20:57:39.760 回答
6

我在工作中愤怒地使用maven。这是一个严厉的情妇。只要您在做许多其他人都有的事情,它就会使事情变得容易,这很重要,只要您按照 maven 认为您应该做的方式来做。走出那条狭窄的道路,它会在每一步都与你抗争。

BuildR的使用给我留下了深刻的印象。它像 ANT 一样灵活,同时利用了 maven 的依赖系统。此外,它正在孵化中,所以边缘有点粗糙。

于 2008-09-19T20:33:03.050 回答
4

您的项目听起来不像是适合 Maven 的项目。你似乎有一个工作的开发环境。为什么要设置另一个?它只会给你一个额外的项目文件来维护,它打破了良好的 ol' DRY原则。

于 2008-09-19T22:15:36.673 回答
4

我曾经开始一项使用 Maven 的新临时工作。花了 2 天时间试图弄清楚他们的 Maven 构建是如何工作的。原来他们都在 Windows 上使用 maven 1.01,而我无意中试图在 1.02 上构建,所以它对我不起作用。这个地方没有人知道它是如何工作的,他们已经使用了几个月并且对它很满意。几个月后,在同一个项目中,我不得不深入研究 jelly 脚本以更改单个构建变量。这不好玩。

当我第一次开始使用它时,我阅读了“约定优于配置”和“使用一组标准目录”。这些不是我在文档中可以找到的任何地方。我猜你应该猜到了。

我的意见:

  • 您使用的任何您不完全理解的工具都是错误的,并且是您开发过程的潜在船锚。如果这个工具真的非常复杂,你可能会使用它最简单的部分,而不是深入掌握它。如果您没有使用或回避该工具最强大的部分,您可能会违背使用它的目的。
  • Maven 是一个典型的例子,它充满了自动魔法,以至于你不知道它在做什么,除非你投入比构建工具更多的时间来成为一个 maven maven。寻找问题的过度设计的解决方案。
  • 我没有找到任何我需要做的事情的实例,这些事情我不能用 ant 做而需要 maven 做。我知道有一些,我只是从不需要它们。如果我这样做了,我可能会对处理 maven 所需的努力更加慈善。
  • 它使您的构建依赖于互联网。现在下载一个小项目,运行 mvn 并让 maven 下载 10 个插件,甚至在它开始构建你想要构建的东西之前,这种情况并不少见。它在做什么?没有办法真正知道,但你最好希望它不会破裂。当它确实失败时,失败的复杂性和堆积的依赖层使其基本上无法调试。我不明白为什么这在任何方面都是对更简单的构建工具的改进,或者出于任何原因甚至是可取的。

总而言之,它几乎是魔法,只是当它不起作用时,你可能不知道为什么。这似乎是一个糟糕的权衡。公平地说,这是几年前的事了。我知道我不友善,并且在后续版本中得到了改进(我也使用过)。尽管如此,我讨厌它(你能说出来吗?)

于 2008-12-16T22:21:11.960 回答
3

我们完全按照您在我们的项目中所做的工作,并且我们使用 maven。您希望使用 maven 拥有标准化的布局和构建项目的方式。您永远不必将所有这些 jar 依赖项存储在 SVN 中或将它们保存在特殊的地方,maven 会为您做到这一点。Maven 还可以作为让其他开发人员轻松了解您的项目的一种方式。一旦你开始使用它,你就再也不想回头了 :)

于 2008-09-19T20:33:49.833 回答
2

除了许多 oss 项目正在使用(或转换为)maven 并且一些闭源项目正在迁移到 maven 的事实之外,您的项目不一定会从使用 Maven 中受益很多。

但是,如果您考虑将其开源,那么您项目的用户可能会从您的项目使用 maven 中受益。

Maven(jar 依赖项)的一些重要好处可以通过 ivy(http://ant.apache.org/ivy/)获得。

再说一次,因为您似乎表明您是唯一的开发人员。如果 maven 不适合您,您可以快速恢复。

BR,
~A

于 2008-09-19T22:33:13.527 回答
1

不。看看别人怎么,仔细研究。还可以考虑在 SO 上查看我对 Maven 的其他一些评论。

于 2008-12-16T21:48:20.827 回答
0

前段时间我使用maven进行依赖管理,因为我厌倦了添加所有的jar,如果我想在另一个盒子上测试它。您实际上不必为此“学习”它,学习它不需要太多时间。

然而,最简单的方法是询问已经了解 mvn 的人,这样他就可以向您展示它是如何工作的,然后您很快就会学会它。

于 2008-12-16T22:12:55.597 回答
0

Maven 的一大优势是它可以进行大量的构建/依赖管理,而无需您编写任何构建脚本,甚至不必描述您的构建过程。您已经完成了项目设置,因此您不会受益于 Maven 为您设置项目 shell 或下载您指定的依赖项,而无需单独下载它们。如果您的目标是学习如何使用和管理 Maven,那么对于像这样没有其他开发人员并且构建过程非常简单(据我所知)的项目这样做也无济于事。所以我建议不要在现有项目中使用 Maven。

I would however setup a simple test application similar to yours using Maven and compare it to your project's structure to see if you follow best practices(at least as the Maven developers see them) and if your application follows standard web application conventions.

于 2008-12-16T23:10:48.833 回答