Java、吞噬和 maven 文件夹结构

2022-09-03 06:06:26

我有一个使用Maven标准目录布局的Java Web项目:java文件进入(实际上:),资源进入,Web内容进入。java/src/main/javaresourceswebapp

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

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

(A) 吞噬内置到 webapp 文件夹中

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

(B)在构建过程中使用咕噜声

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

我的团队在这两个选项之间徘徊。有没有人对这些解决方案中的任何一个有任何工作经验?


答案 1

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

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

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

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

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

优点 - 出色的解耦,因此前端开发人员可以快乐地生活,甚至不必在本地安装Java或担心重新编译后端。如果您希望Travis(或您喜欢的CI应用程序)在后端和前端进行单元测试,则效果很好。

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


答案 2

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

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

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