【问题标题】:Where do you put client-side source files when using grunt and maven?使用 grunt 和 maven 时,您将客户端源文件放在哪里?
【发布时间】:2014-01-30 06:42:08
【问题描述】:

通常在使用 Maven 的 Java 项目中,您将客户端源文件放在 src/main/webapp 中。这个目录包括你的 html、css、脚本、图片等。

但是,许多 grunt 项目倾向于将这些文件放在根目录中。就好像 Grunt 的设计理念是,您的项目客户端应用程序,而不是大型服务器端项目的一部分,例如将 Java 与 Spring 结合使用。

给定一个使用 Maven 的 Java 项目,放置与 Web 相关的源文件的最佳位置是哪里?

你把它们放在src/main/webapp吗?

您是否完全创建另一个目录,例如src/web,然后在构建时将所有内容复制到src/main/webapp

我的目标是使客户端构建工具尽可能透明。我想理想的情况是像我一直在做的那样简单地从src/main/webapp 工作 - 这对我的项目当前的设置方式来说并不显眼。

但是,如果我在 src/main/webapp 工作,我知道无论如何我都需要区分 src 和构建目录。我确信我的 html 文件可以保留在原处,但这里肯定会与 javascript 和 css 文件以及图像存在利益冲突。

src/main/webapp 真正拥有一个 100% 独立的源文件夹是否有意义?有没有办法在您修改文件时连续构建/复制/同步应用程序,从src/websrc/main/webapp?这会带来不便并引起挫折和问题吗?很慢吗?

我想要关于这个主题的任何建议。谢谢。

【问题讨论】:

标签: java javascript maven build gruntjs


【解决方案1】:

选项 1:将 UI 资源放在 src/main/webapp 中:

这是一个在 Github 上流行的 quick-n-dirty 解决方案。它有助于使示例项目保持小而简洁。在这种情况下,通常人们会将package.jsonbower.jsonGruntfile.js.bowerrc 放在maven 项目的根目录中,其中.bowerrc 表示将组件安装到src/main/webapp/bower_components

如果您有一个缩小/转换资源的任务,转换后的资源可以转到一个新目录,例如src/main/webapp/dist。然后使用grunt-usemin 之类的东西让您的应用使用dist 目录中的资源。

如果您的应用程序将使用安全框架(例如 Spring Security),您可能希望所有资源都在 src/main/webapp 中,以便安全框架可以规范对这些资源的访问。但是,您仍然可以使用选项 2 来实现这一点,方法是将必要的资源复制到 src/main/webapp 的 grunt 任务。

优点

  • GitHub 上的常用方法。将所有内容保存在一个项目中。

缺点

  • 服务器提供的文件版本是src/main/webapp 中文件的副本,因此更改src/main/webapp 中的文件不会立即反映在部署的应用程序中。要获得热重载,您需要使用 grunt-contrib-* 之类的东西。
  • 前端和后端代码混合在一起。两个不同的团队更难在代码库上工作。

选项 2:将 UI 资源放在单独的项目中:

您可以通过将 UI 和后端保持在完全独立的项目中来实现更好的项目组织。在这种情况下,UI 和 maven 项目可能是同级目录。

然后在部署到服务器时,您可以:

  1. 分别部署两个项目(称它们为myproject-uimyproject-services)。 myproject-ui 中的 javascript 对 myproject-services/** 进行 RESTful 服务调用。
  2. 使用 grunt 任务将必要的资源复制到 src/main/webapp,然后部署您的(一个)项目。

优点

  1. 后端和前端尽量分开
  2. 正如您所提到的,前端维护着大多数客户端示例应用中的工作流和目录结构
  3. “部署” UI 是一个简单的事情,即从服务器的部署目录创建一个符号链接到您的 UI 源代码。更改任何 UI 代码都会自动反映在已部署的应用中。
  4. 您可以同时部署多个不同的 UI(也许您有 myproject-admin-uimyproject-user-ui)。您可以通过访问任意一个来访问

    http://localhost:8080/myproject-admin-ui
    http://localhost:8080/myproject-user-ui
    

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2018-06-25
    • 2018-05-06
    • 2011-03-26
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多