【问题标题】:What is a better, simpler and more modern way to build Java Web Applications compared to Maven? [closed]与 Maven 相比,构建 Java Web 应用程序的更好、更简单和更现代的方法是什么? [关闭]
【发布时间】:2012-01-12 21:50:34
【问题描述】:

我正在考虑摆脱 Maven。对于简单的应用程序来说没问题,但是我遇到了我无法解决的问题,似乎没有其他人能够解决它们,甚至 Maven 邮件列表也没有解决方案。

有哪些现代的 Java 构建工具可以提供 Maven 所提供的功能,同时也能够应对制作现代 Web 应用程序的挑战?例如,如果我想使用 Javascript 压缩工具,例如 YUI 压缩器,它可以让我在创建 War 文件之前轻松轻松地压缩/聚合我的 css 和 javascript。

  • 说明:maven的问题是war插件里面没有办法做事。例如,我想在 yui 压缩器复制 webapp 的资源(css、图像、javascripts 等)之后调用它。如果我能做到这一点,它将确保任何未压缩的 javascript 文件(在 Y​​UI 压缩器的缩小/聚合过程中被排除)是最终战争包的一部分。这是不可能的

    YUI 压缩器仅在您计划压缩和/或聚合所有文件而不是子集时才有效。有像 jscharts.js 这样的 javascript 文件,您需要将它们从缩小过程中排除,否则它们会弄乱实际的源代码。尽管解决方案很简单,但在 Maven 中无法处理此用例。

能够使用实时 javascript 与压缩/聚合 javascript 也将是一大福音。

  • 说明:用 html 文件中的内容重构大量 javascript 包含也很困难。假设您有 100 个 javascript 文件,并且您希望能够使用实时 javascript 文件进行开发,但您希望将压缩/聚合的文件用于生产。您仍然需要在 html 模板(例如 freemarker)中包含所有 javascript 文件,因为您想在开发期间处理实时文件。对于生产,您还必须在 maven pom.xml 中维护一个单独的列表,以便聚合它们。

    这两个 javascript 文件列表基本上是相同的,对于开发人员来说,确保它们包含相同的文件并以相同的顺序是一个额外的负担 :( Maven 无法帮助解决这种常见的网络相关问题2011 年。Rails 3.1 的人虽然免费获得这个。我们可以做得更好。

我仍然需要拥有过滤器的能力,就像在 Maven 中一样,以处理不同的生产环境。例如,我经常使用属性文件来更改 Spring 的 applicationContext.xml 或 servlet 上下文中的值。

我还需要向类路径添加资源的能力。我有这些庞大的文本文件,它们为我提供了字典、同义词库等的基本功能。我需要将它们放在我的类路径中。

如果构建工具也使用 Maven 存储库,那就太好了。

任何其他好处,例如更简单和编写更少的配置代码将是一个加分项,但我上面列出的功能是最重要的。

谢谢。

【问题讨论】:

  • 你能提到你所指的问题吗?
  • @Alejandro Diaz 主要是我提到的 javascript 内容。我已经花了几天时间试图让它工作。我提出了 6 个解决方法,但每个人都提出了另一个我不会解决的问题。我想要一些考虑到这一点的东西。我不想变通。即使有解决方案(似乎没有人知道),我认为这不是一个好兆头,需要几天时间才能解决。这有点疯狂。
  • 我曾经在一个大项目中工作过,我们使用的是 YUI 压缩器 + 资源版本控制。我不记得它有问题(我说的是一个大项目......)还有其他很酷的工具......但是,Maven 被广泛使用并且易于扩展。可能一个好主意是想出自己的自定义插件,而不是花几天时间寻找解决方法。我并不是说 Maven 是每个人的答案……但是,您已经在使用它了。
  • @Alejandro Diaz 我将不得不采用插件方法。 maven 的问题是无法在 war 插件内部做事。例如,我想在复制资源后立即调用 yui 压缩器。这将确保任何未压缩的 javascript 文件(被排除在外)都是最终战争的一部分。 YUI 压缩器仅在您计划压缩和/或聚合每个文件时才有效,但对于像 jscharts.js 这样的一些 javascript 文件,您不能这样做,因为它会搞砸。用 html 文件中的内容重构大量 javascript 包含也很困难。
  • @Alejandro Diaz 让我进一步解释一下。假设您有 100 个 javascript 文件,并且您希望能够使用实时 javascript 文件进行开发,但您希望将压缩/聚合的文件用于生产。您仍然需要在 html 模板(例如 freemarker)中包含所有 javascript 文件,并且您还必须在 maven pom.xml 中维护一个单独的列表。这些列表基本上是相同的,确保它们包含相同的文件并以相同的顺序对我来说是一个额外的负担:( Maven 在 2011 年没有帮助解决如此常见的网络相关问题。

标签: java javascript maven build


【解决方案1】:

您应该能够在 Gradle 中完成所有这些工作。本质上,它是 Groovy 中的一组库和模块,它们为您构建构建提供了强大的功能。如果您需要扩展它,那么您可以在 Groovy 中编写您的扩展。挺好看的。

【讨论】:

    【解决方案2】:

    如果您想学习Scala,那么我强烈推荐SBT。我们使用它来构建我们所有的 Java 代码,并且对它非常满意。它做了一些简洁的事情,例如并行构建,并且与 ANT/Maven 不同,它的增量编译实际上可以工作。它还包含一个不错的 REPL,允许您直接与构建和代码进行交互。

    SBT 易于扩展,因为它的构建文件是用代码而不是 XML 编写的。因此,插件可以满足您的所有需求,例如:

    至于项目依赖项,它们可以是托管(从 Maven/Ivy 自动下载)或 非托管(即资源(jar、文件、...)添加自己) - 它们也可以混合和匹配。

    SBT 使用标准的 Maven 目录布局(尽管这很容易改变),对 IDE(fx.EclipseIdea)有很好的支持,它还可以生成一个 pom 如果您愿意,可以为您归档。

    有一个很好的指南可以让你快速开始使用 SBT here

    【讨论】:

    • 您是否有证据/确认它会轻松完成我想要的一切?
    • @egervari 更新了帖子,提供了有关您的具体观点的更多信息。
    • 我一定会看看这个。我希望只维护一个有序的 javascript 文件列表很容易——所以我可以将它们传递到 yui 压缩器,也可以传递到我的主站点布局的 html 模板中。这对于 maven/spring 来说是非常困难的。我希望其他人想要这个并且它已经可用了。
    • 这太糟糕了,但是 yui 压缩器不够复杂。我可能也必须建立自己的。我认为即使是 maven 的插件在很多方面都更好。不过,问题在于 maven 的死板,无法处理事情、定制事情以及在事情发生之前或之后轻松添加一点点功能。
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 2012-12-14
    • 2020-11-27
    • 1970-01-01
    • 2013-02-27
    • 2011-04-05
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多