【问题标题】:Maven - Properly structuring modules of different languages in inteliJMaven - 在 intelliJ 中正确构建不同语言的模块
【发布时间】:2019-09-26 17:39:17
【问题描述】:

我最近一直在学习多模块项目,我几乎将我所有的 java 项目重构为包含多个小模块的项目。当它全部是 java 时一切都很好,但我现在正在做一个项目,我有一个 React 应用程序、一些 python 代码以及 java。

所以我有一个父模块,并且我将我的 java 代码分成了一些模块,但是我应该如何处理 java 脚本和 python 呢?我将java脚本放在它自己的模块中,它有一个pom(不依赖任何东西),但是把这个反应代码放在它自己的模块中实际上有什么作用? Maven 处理我的 java 模块的依赖项,但是这里的依赖项以不同的方式处理,所以我不能将任何依赖项管理放入 react 模块 pom.xml 中。 python模块也是一样。

  • 为什么我什至应该将除 java 之外的任何东西分离到它自己的模块中?我一直在使用模块,主要是为了优化第三方库的依赖管理。为 react 代码和 python 代码创建模块有什么好处吗?

【问题讨论】:

  • 您可以安全地删除所有提及 Intellij 的内容。您的问题是 Maven 问题,您使用 IntelliJ 的事实不会改变答案。
  • @DavidS 感谢您的评论。真的不知道为什么我提到了 inteliJ。希望您可以对模块或其他东西进行一些 intelij 配置。
  • 多模块思想仅适用于基于 java maven/gradle 的项目。您可以将其他项目放在 java 项目的子目录中,但 reactjs 和 python 项目不是基于 pom 的。
  • @MithunS 那么将它们放在模块中而不是普通目录文件夹有什么意义吗?我可以在 intelij 中看到,在创建新模块时,您可以选择将该模块设置为 python 模块或 react 模块,但这有什么意义呢?
  • Emperor 您可能会发现 this blog post 很有帮助。它并不能完全回答您的问题,但它应该让您有所思考。

标签: java maven multi-module


【解决方案1】:

所以,这是一个想法。 假设您有这些文件夹/目录,它们中的每一个都代表一个不同的项目。

MyAwesomeProject
->db
->rest-api-java-maven
->reactjs-ui
->python-web-app
->scripts
  ->front-end.ps1
  ->back-end.ps1
  ->db.ps1
  ->back-end-2.ps1
->setup.bat
->docker-compose.yml

让你的 setup.bat 从脚本文件夹运行脚本。

#Contents of setup.bat file

@echo off
start PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "scripts\front-end.ps1"
start PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "scripts\db.ps1"
start PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "scripts\back-end.ps1"
exit

这些单独的脚本文件将启动每个单独的 docker 容器 例如,

#Contents of db.ps1
cd db
$containerID = docker ps -q
docker kill $containerID
docker build . --tag=db
docker run -p 27017:27017 db

#Contents of back-end.ps1
cd rest-api
.\mvnw clean install -DskipTests=true
.\mvnw spring-boot:run

#Contents of ui.ps1
cd ui
npm run start

然后拥有每个项目(我说项目不是模块,因为 java 后端项目可以有多个模块) 拥有自己的 Dockerfile

现在您需要做的就是运行 bat 文件,您的项目将被正确初始化。

【讨论】:

  • 我并不是说这是一个糟糕的答案,它是一个非常现代的答案,但是将 Docker 纳入其中会带来很多复杂性。我觉得先学习“老式方法”会是皇帝,虽然我承认我不知道那是什么。
  • 我认为老式的方法是根本不使用 docker 或 docker-compose,让您的脚本设置每个进程和不同的端口。我认为这也可以。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 2019-05-21
  • 1970-01-01
  • 2012-02-24
  • 2016-04-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多