maven - Javascript Web 应用程序和 Java 服务器,全部在 Maven 中构

我们正在使用 AngularJS 开发一个 Web 应用程序,我们喜欢使用 Bower 进行依赖管理,使用 Grunt 构建、运行测试等的想法。(Yeoman)

服务器是使用 Maven 用 Ja​​va 完成的,所以我们当然想用一个简单的 mvn install 构建一切(Web 应用程序 + 服务器)

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

1) 将它们视为两个不同的应用程序,事实上它们是。所以使用不同的构建方法/工具是可以接受的。

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

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

4) 其他。

更容易与 Jenkins 集成的方法是加分项。

提前致谢!

最佳答案

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

基于 Java 的工具

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

  • WRO4J - 支持很棒,Maven 和 Eclipse 集成很棒,插件列表很广泛,而且框架足够灵活,你可以用一些麻烦来编写一个插件来满足你的任何需要。如果您仅限于基于 Java 的 Assets 管道,那么这肯定是要走的路。 Wro4j 的问题在于它相对于基于 Node 的工具来说很慢(即使它启动了 Node 进程)。
    为了给出一些真实世界的数字,编译和连接 25 个包含 LESS、CSS CoffeeScript 和 JavaScript 的 Assets 包在使用 Rhino 时大约需要 35 秒,而在 2013 年具有 16G RAM 的 iMac 上使用 Wro4j 的 Node 支持大约需要 15 秒。使用 Grunt +Node 在我的 MacBook Air 上大约需要 2 秒。

  • JAWR - 集成和功能列表非常好,但文档不是很好,编写自己的插件可能有点棘手。当我最初写这篇文章时,JAWR 处于 4 年的中断期,但截至 2014 年 1 月,它现在又处于积极开发中。如果您选择研究 Java 工具,那么这值得研究。

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

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

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

基于 JavaScript 的工具的唯一潜在问题是您必须拥有 Node , npm和 grunt-cli/gulp在任何需要进行编译的机器上。如果您无权访问您的 CI 机器或不使用基于 Artifact 的部署,这可能很难卖。

将它集成到您​​的 Maven 项目中非常容易,并且您有很多选择。您可以使用 Maven ant-run plugin ,您可以运行 ant exec task并从 Maven 调用它,或者最好你可以使用 maven exec task .
下面是使用 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>

关于maven - Javascript Web 应用程序和 Java 服务器,全部在 Maven 中构建或使用 Grunt for Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406977/

相关文章:

xcode - 使用 Xcode 4 运行发布版本

eclipse - 在解决构建路径错误之前,无法构建项目。

javascript - 如何在没有require语句的情况下使用webpack加载目录中的所有文件

c++ - C++的类似Maven的依赖管理?

ios - Xcode 4 : Build Failed, 没有问题

android-studio - 此版本的android studio 与使用的gradle 版本不

linux - 如何构建和安装 GLFW 3 并在 Linux 项目中使用它

java - 如何将一个 Gradle 脚本导入另一个?

c# - 无法将目标平台更改为 "any CPU"

angular - 组件是2个模块声明的一部分