Javascript Web应用程序和Java服务器,在Maven中构建所有内容或使用Grunt进行Web应用程序?

voi*_*oid 97 build-automation build maven angularjs gruntjs

我们正在使用AngularJS进行Web应用程序,我们喜欢使用Bower进行依赖关系管理和Grunt构建,运行测试等的想法.(Yeoman)

服务器是用Java完成的,所以当然我们希望用简单的mvn install构建一切(Web应用程序+服务器)

那你采取什么方法,为什么?

1)将它们视为两种不同的应用,实际上它们是.因此可以使用不同的构建方法/工具.

2)忘掉Grunt Bower,使用Maven插件构建,运行测试,管理Web应用程序的依赖关系.如果是这样的话,那是哪一个?

3)使用Maven exec插件调用Grunt构建前端webapp.我认为这更像是一个黑客而不是一个解决方案.

4)其他.

更容易与Jenkins集成的方法是一个加分.

提前致谢!

Bae*_*aer 73

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

基于Java的工具

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

  • WRO4J - 支持很棒,Maven和Eclipse集成非常棒,插件列表很广泛,框架足够灵活,有了一些弯头,你可以根据需要编写插件.如果您只局限于基于Java的资产管道,那么这肯定是要走的路.Wro4j的问题在于它相对于基于Node的工具来说很慢(即使它启动了Node进程).
    为了给包含LESS的25个资产包编译和连接一些真实世界的数字,CSS CoffeeScript和JavaScript在使用Rhino时需要大约35秒,在使用16G RAM的2013 iMac上使用Wro4j的Node支持需要大约15秒.在我糟糕的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的工具唯一可能的悬念是,您需要在需要进行编译的任何机器上安装Node,npmgrunt-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>
Run Code Online (Sandbox Code Playgroud)

  • 如果`grunt`构建失败,此进程是否支持失败`Maven`构建? (12认同)
  • 任何未正确返回的exec任务都应该使构建失败.http://stackoverflow.com/questions/3480162/can-maven-exec-plugin-fail-the-build (6认同)

Jef*_*ith 24

对于仍然在寻找关于这个主题的更多信息的人来说,Yeoman的创作者之一有一篇好文章(在最初提出这个问题几个月之后写的),它更详细地扩展了原始答案:


Eir*_*erg 13

Then there's also the frontend-maven-plugin: /sf/answers/1372054421/ It downloads Node and NPM for you (locally to your project), downloads Grunt via that NPM (run by that Node) and then runs Grunt (via that Node). It's self-bootstrapping, and you don't need Node installed on the machine to build the project. Just one command; mvn install.


Jul*_*ois 13

你可能想要查看http://jhipster.github.io/:它是一个Yeoman生成器,它生成一个Maven,Grunt和Bower一起工作的应用程序.

这有点像你的第三个选项,但一切都是为你配置的,这并不容易.它还为您生成基本的AngularJS和Java REST服务.

  • 实际上,你只需要包含yeoman-maven-plugin,这允许你将所有JavaScript配置内容(bower,npm,grunt)作为兄弟姐妹放入pom.xml(这些文件应该属于IMO的地方),以及mvn install它将构建一切 - 包括你在src/main/webapp下的webapp.花了不到半个小时的时间将现有项目移植到该结构中.当然你应该看看https://github.com/jhipster/jhipster-sample-app上的示例应用程序 (2认同)