Javascript Web应用程序和Java服务器,全部在Maven中构建还是将Grunt用于Web应用程序?


97

我们正在使用AngularJS做一个Web应用程序,我们喜欢将Bower用于依赖关系管理,将Grunt用于构建,运行测试等的想法。(Yeoman

服务器是使用Maven使用Java完成的,因此我们当然希望通过简单的mvn install构建一切(Web应用程序+服务器)

那么,您采用什么方法,为什么呢?

1)将它们视为两个不同的应用程序,实际上它们是。因此,可以使用其他构建方法/工具。

2)忘记Grunt Bower,使用Maven插件来构建,运行测试,管理Web应用程序的依赖项。如果是这样,那是什么?

3)使用Maven exec插件调用Grunt来构建前端Webapp。我将其更多地视为黑客而非解决方案。

4)其他。

易于与Jenkins集成的方法是一个加号。

提前致谢!


2
3年以来,工具集成已明显改善。这个Maven插件似乎涵盖了大多数内容: github.com/eirslett/frontend-maven-plugin
earcam '16

Answers:


73

在使用Java工具包中的几乎所有资产管道工具一段时间后,我得出了一些结论:

基于Java的工具

有一些工具,但是最受欢迎的是JAWR和Wro4J。这两个最大的问题是它们大多基于Rhino(WRO4J现在具有一些Node支持),并且与基于Node的工具相比,Rhino的运行速度很慢。您还必须考虑到JavaScript工具正在迅速成熟,因此您应该寻找可以快速移动的工具。

  • WRO4J-支持非常棒,Maven和Eclipse集成非常棒,插件列表非常广泛,并且框架足够灵活,您可以使用一些弯头的润滑脂来编写所需的插件。如果您局限于基于Java的资产管道,那么这肯定是可行的方法。Wro4j的问题在于,相对于基于Node的工具而言,它运行缓慢(即使启动了Node进程)。
    要给出一些现实世界的数字,在包含RhESS的25个资产捆绑包中进行汇编和级联时,在使用Rhino的2013 iMac(具有16G RAM)上使用Rhino时,CSS CoffeeScript和JavaScript大约需要35s,而使用Wro4j的Node支持大约需要15s。在微弱的MacBook Air上使用Grunt + Node大约需要2秒钟。

  • JAWR-集成和功能列表都不错,但是文档并不出色,编写自己的插件可能有些棘手。当我最初写这篇文章时,JAWR处于中断4年的中期,但是从2014年1月起,它现在正在积极开发中。如果您选择研究Java Tools,这是值得研究的。

基于节点的工具(与Ant / Maven构建集成)

  • Grunt-很简单,拥有一个出色的插件生态系统,并且社区规模庞大。如果您需要做某事,您可以打赌,那里有一个插件-可能甚至是由grunt的创造者编写的插件。对Grunt的主要批评是它是配置驱动的,这使得设置非常容易,而不是“节点方式”。还值得一提的是,Grunt任务不容易组合,因此对于复杂的JavaScript构建管道,Grunt可能不是理想的选择。

  • Gulp -Gulp是Grunt的快速增长的替代品。默认情况下,它是并发的,并使用流来避免临时写入文件系统,这可以大大加快构建速度。Gulp非常惯用,并且着重于代码>配置,尽管它为您提供了很多功能,但对于在JavaScript中没有核心能力的团队而言,这并不是理想的选择。

基于JavaScript的工具唯一的潜在障碍是,您需要在需要进行编译的任何计算机上安装Nodenpmgrunt-cli / gulp。如果您无权访问CI机器或未使用基于工件的部署,那么这可能会很难。

将其集成到您的Maven项目中非常容易,并且您有很多选择。您可以使用Maven ant-run插件,可以运行ant exec任务并从Maven调用它,或者最好是仅使用maven exec任务
下面的代码使用exec插件将其集成到Maven生命周期中,如果这对任何人都有用的话。

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <executions>
        <execution>
          <phase>prepare-package</phase>
          <goals>
            <goal>exec</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <executable>grunt</executable>
      </configuration>
    </plugin>

1
感谢您的详细回答。我想我会选择“基于节点的工具”选项。Grunt的新手,我喜欢到目前为止所看到的,如果我能同时拥有两个世界的最好水平,那就太好了。我不知道WRO4J和JAWR的存在。再次感谢。
无效

wro4j集成了less4j处理器,该处理器是less.js的基于Java的实现,其性能可与node.js原生处理器相媲美。
Alex Objelean

1
wro4j使用node.js的速度不是那么快的原因,主要是因为每次执行都需要磁盘IO操作。仅当基于node.js的进程(如lessc)允许内存中的资源编译时,才能对此进行改进。
Alex Objelean

12
Maven如果grunt构建失败,此过程是否支持构建失败?
Snekse

6
任何执行不正确的执行任务都会使构建失败。stackoverflow.com/questions/3480162/…–
贝尔

24

对于仍在寻找有关此主题的更多信息的任何人,Yeoman的一位创建者有一篇很好的文章(最初问这个问题几个月后写了这篇文章),对文章的原始答案做了更详细的介绍:


多谢!我发现这篇文章非常有帮助,它是我一直在寻找的东西
Ryan J. McDonough 2014年


13

您可能想签出http://jhipster.github.io/:这是一个Yeoman生成器,它生成一个包含Maven,Grunt和Bower一起工作的应用程序。

这有点像您的第三个选项,但是为您配置了所有内容,这并不容易。它还为您生成基本的AngularJS和Java REST服务。


1
对于我的项目而言,从一个新生成的应用程序开始为时已晚。但这很棒而且很有帮助,我将借用生成的应用程序中的一些解决方案并将其用于我的项目中。谢谢!
Matsemann

2
实际上,您只需要包括yeoman-maven-plugin即可,这使您可以将所有JavaScript配置内容(bower,npm,grunt)作为同级放入pom.xml(这些文件应该在IMO的确切位置),然后mvn install它将构建所有内容-包括src / main / webapp下的webapp。我花了不到半小时的时间将现有项目移植到该结构。当然,您应该在github.com/jhipster/jhipster-sample-app中
raven_arkadon 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.