【问题标题】:Java, gulp and maven folder structureJava、gulp 和 maven 文件夹结构
【发布时间】:2014-11-09 10:36:00
【问题描述】:

我有一个使用Maven standard directory layout 的Java web 项目:java 文件进入java(实际上是:/src/main/java),资源进入resources,web 内容进入webapp

然后我们想通过添加 bower、sass、gulp 等来改进我们的 web 层。我们的 gulp 构建编译 scss、最小化 javascripts、优化图像等,一切都是你所期望的。但这引入了 1) 另一个构建工具 gulp 和 2) gulp 生成的文件。

问题是如何组织这样的项目?一种方法可能是:

(A) gulp 构建到 webapp 文件夹中

在此解决方案中,所有 javascript、图像、scss 文件都存储在 /src/main/assets 中,并构建到 /src/main/webapp 中。源文件和 gulp 生成的文件都被提交到 git。 gradle 构建独立于 gulp,对于没有安装 gulp 的用户来说是可以的——比如那些只需要在后端工作的用户。此外,CI 服务器不依赖于 gulp 的东西。

(B) 在构建过程中使用 gradle 中的 gulp

在这个解决方案中,gulp 是从 gradle 调用的。因此,Gradle 构建了一切。当你想尝试某事时,你必须每次都使用 gradle。此外,每个开发人员都需要安装 gulp,这对于使用 windows 的开发人员来说可能是一个问题(正如我被告知的那样)。 CI服务器也应该知道如何运行gulp。

我的团队在这两个选项之间左右为难。有人对这些解决方案有任何工作经验吗?

【问题讨论】:

标签: java maven gradle project gulp


【解决方案1】:

我目前正在使用 Java + Grunt + Maven。我发现有两种方法可以将前端与后端打包在一起,这同样适用于 Gulp。

最终取决于您的项目/团队的最佳选择。根据我的经验,我通常在与他人合作时使用选项 B,因为解耦很容易解决其他问题。当我在做自己的副项目时,我总是选择选项 A,因为它更容易启动一个网络服务器并运行更接近 DEV/PROD 的本地环境。

A) 将您的前端放入 webapp 文件夹(例如https://github.com/kdubb1337/maven-grunt-webapp

优点 - 您可以在一个地方启动后端并进行所有开发,并且使用 Spring 安全性是一件轻而易举的事,即使没有 OAUTH。当通常将它们捆绑到其他环境中的一个端口时,在本地环境中使用两个网络服务器时问题更少。

B) 将您的前端保存在不同的文件夹中,甚至保存在您克隆到后端存储库根文件夹的不同存储库中。 (例如https://github.com/kdubb1337/maven-grunt)查看 'yo' 文件夹

优点 - 出色的解耦功能让前端开发人员可以尽情享受,甚至无需在本地安装 java 或担心重新编译后端。如果您希望 Travis(或您最喜欢的 CI 应用程序)在后端和前端进行单元测试,效果很好。

编辑我发现了这个很棒的插件,您可以使用 maven/gradle 来构建前端 https://github.com/eirslett/frontend-maven-plugin。似乎要走的路,将与这个家伙一起重构我的入门项目,以实现 grunt 和 gulp

【讨论】:

    【解决方案2】:

    目前的最佳实践是将前端构建视为一个单独的项目,并将其放入自己的 Maven 或 Gradle 模块中。让您的 Java 构建系统调用 JavaScript 工具(例如,使用 maven-exec-plugin)并将输出保存到 targetbuild 中的适当目录中。将结果打包到一个 jar 中并从类路径中提供。

    如果您使用的是 Bower,则只需在 CI 服务器上安装基本 Node,您的 Java 构建就可以从那里调用必要的构建过程,并根据需要获取 JS 包。不要忘记 (1) 使用 --save 和 (2) 从源代码管理中排除 JS 模块目录。

    此外,我建议查看RaveJS,它管理您的 JavaScript 构建并让您不必在开发过程中配置观察者等。

    【讨论】:

    • 开发者每天如何使用它?例如,您如何准备展开的文件夹并将所有内容放入其中,这样他们就不需要在每次更改 javascript 时都重新启动服务器?
    • 您将服务器设置为在 JavaScript 目录之外提供服务。这在 Spring MVC 中非常简单,而且我知道在 Eclipse 中运行,这一切都是自动设置的。如果您希望它在不需要 IDE 来管理类路径的情况下运行,请让配置文件将您置于开发模式(无缓存等),还将服务器的查找路径设置为包含磁盘存储库的 file: URL .
    • 旧帖子但仍然有效。要更新分解的 WAR 目录,您有几个不错的选择:gulp.watch 在更改时复制它们,或者如果您使用的是 IDE,它们有一个 on change copy 命令。 IntelliJ 将在 IDE 失去焦点时复制资源。或者您可以使用文件观察器。最后,您永远无法将文件夹(联结)上的符号链接或文件上的硬链接复制并使用到分解的战争目录中。那么它将永远是最新的。
    【解决方案3】:

    我推荐的最佳实践是使用 com.github.eirslett.frontend-maven-plugin(或 maven grunt 插件)从 mvn(进程资源目标)调用 grunt/gulp 构建。当 CI 构建时,它都是集成的,甚至 npm 等都可以安装在 mvn 的目标中,因此您无需为 npm 配置 CI 服务器。

    当开发人员构建时,大多数情况下仍然只使用一个 maven 命令。对于 JS/CSS/HTML 开发人员,在 mvn clean install 之后,他们可以在后台运行 grunt/gulp "watch" 以使他们的 JS 更改立即反映在浏览器中,而不会产生任何 maven 开销(只是邪恶的快速 gulp/grunt 任务) .

    【讨论】:

      【解决方案4】:
      1. 在默认的 Tomcat webapp 目录中部署 UI 组件。
      2. 在“wtpwebapps”(通过eclipse上传war的默认目录)目录下部署类文件。

      设置 Eclipse

      1. 转到服务器选项卡,打开 tomcat 的属性
        (来源:scotch.io

      2. 确保位置应该是[工作区元数据]

      3. 然后双击tomcat打开Tomcat概览。
        (来源:scotch.io

      4. 将服务器位置设置为“使用 tomcat 位置”。

      Grunt/Gulp 设置

      1. 使用复制任务将构建UI文件复制到<tomcat installation directory>/webapps/<contextRoot>/

      https://pub.scotch.io/@ankur841/eclipse-tomcat-deployment-with-gruntgulp-build

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 2018-09-15
        • 2016-08-11
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多