我们正在使用AngularJS进行Web应用程序,我们喜欢使用Bower进行依赖关系管理和Grunt来构建,运行测试等等 . (Yeoman)
服务器是用Java完成的,所以当然我们想用一个简单的 mvn install
构建一切(Web应用服务器)
那你采取什么方法,为什么?
1)将它们视为两种不同的应用,实际上它们是 . 因此可以使用不同的构建方法/工具 .
2)忘掉Grunt Bower,使用Maven插件构建,运行测试,管理Web应用程序的依赖关系 . 如果是这样的话,那是哪一个?
3)使用Maven exec插件调用Grunt构建前端webapp . 我认为这更像是一个黑客而不是一个解决方案 .
4)其他 .
更容易与Jenkins集成的方法是一个加分 .
提前致谢!
5 回答
在使用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节点需要大约2秒 .
JAWR - 集成和功能列表非常好,但文档并不好,编写自己的插件可能有点棘手 . 当我最初撰写这篇文章时,JAWR正处于4年的中断状态,但截至2014年1月正在积极开发中 . 如果您选择调查Java Tools,这值得研究 .
基于节点的工具(与Ant / Maven构建集成)
Grunt - 它还值得一提的是,Grunt任务不易组合,因此对于复杂的JavaScript构建管道而言,Grunt可能并不理想 .
Gulp - Gulp是Grunt快速增长的替代品 . 默认情况下它是并发的,并使用流来避免临时写入文件系统,这可以大大加快您的构建速度 . Gulp是非常惯用的,并且强调代码>配置,虽然这给了你很大的力量,但它在JavaScript中具有核心竞争力 .
基于JavaScript的工具唯一可能的挂起是你必须在任何需要编译的机器上拥有Node,npm和grunt-cli / gulp . 如果您无法访问CI计算机或未使用基于工件的部署,则可能很难 .
将它集成到您的Maven项目中非常简单,您有很多选择 . 您可以使用Maven ant-run plugin,您可以运行ant exec task并从Maven中调用它,或者最重要的是您可以使用maven exec task .
下面是使用exec插件将其集成到Maven生命周期的代码,如果这对任何人都有帮助的话 .
对于仍然在寻找关于这个主题的更多信息的人来说,Yeoman的创作者之一有一篇好文章(在最初提出这个问题几个月之后写的),它更详细地扩展了原始答案:
然后还有frontend-maven-plugin:https://stackoverflow.com/a/19600777/320399它为您下载Node和NPM(本地到您的项目),通过该NPM下载Grunt(由该节点运行)然后运行Grunt(通过该节点) . 它需要在机器上安装Node来构建项目 . 只有一个命令; mvn安装 .
你可能想要签出http://jhipster.github.io/:它是一个Yeoman生成器,它生成一个Maven,Grunt和Bower一起工作的应用程序 .
它是有点像你的第三个选项,但一切都是为你配置的,这并不容易 . 它还为您生成基本的AngularJS和Java REST服务 .
花了几个小时来解决这个问题,我可以这样说:
maven和grunt打得不好,但可以强制执行..
这是a plugin description for running Grunt via Maven build
我希望这有帮助 :)