繁体   English   中英

多模块 Java 项目是否应该有多个 Gradle 项目

[英]Should Multi module Java projects have Multiple Gradle Project

我开始进入 Java 模块化,我想知道是否应该将多模块项目拆分为子 Gradle 项目。 如果是这样或不是这样,目录结构会是什么样子? 我见过一些非 Gradle 项目结构的冲突示例,例如:

reverse/dns/module/module-info.java 
                ./packages..
reverse/dns/module/module-info.java 
                ./packages..

reverse.dns.module/
            module-info.java // module-info is in the root directory and its name corresponds to parent folder
            reverse/dns/module/packages..

它看起来像这样吗?

真的,如果我有两个模块,我只想知道如何构建 Gradle 项目。 如果与任何内容冲突,我还打算使用 jlink 来创建图像。

我问了这个问题的一个变体:

我正在使用 gradle 和 jlink 插件,并且有一个应用程序我想分成两个模块,这些模块应该在 src/main/java 目录下还是应该重构为 src/mod1/ 和 src/mod2 ? 由此产生的另一个问题是测试以及将 junit 测试类放在哪里。 我主要想知道所有这些的目录结构。 谢谢!

Nick Maiorano并收到以下回复:

对于你的第一个问题,Java编译器和运行时对此没有意见。 它们支持任一类型的目录结构。 但是像 Intellij 和 Eclipse 这样的 Java 编辑器会强迫您为每个模块拥有单独的源代码根。 如果您计划让不同的团队维护他们自己的模块,那么您将必须拥有独立的根,并且您可以像使用具有模块依赖关系的 3rd 方库一样通过 jar 或 jmod 文件使用他们的模块。 否则,您可能在一个源下拥有不同的模块,但您将与 Eclipse/Intellij 的模块支持作斗争(但这是可能的)。

你的第二个问题要容易得多:单元测试类应该与它们的测试主题在同一个模块中。 他们应该可以访问模块中的每个类,因此他们成为模块的一部分是有意义的。 它们应该在一个单独的目录中,但与它们的测试主题具有相同的包名称(这样它们就不会被阻止访问包私有方法)。

这符合我决定通过拥有两个单独的 Gradle 子项目来构建应用程序的方式,每个子项目都有自己的 src/main/java 目录。 我的最终目录结构如下所示:

wit-core/
├── build.gradle
├── core.vim
└── src
    ├── main
    │   └── java
    │       ├── dev
    │       │   └── joshpetit
    │       │       └── wit
    │       │           └── core
    │       │               ├── base
    │       │               ├── interpret
    │       │               └── model
    │       └── module-info.java
    └── test
        └── java
            └── dev
                └── joshpetit
                    └── wit
                        └── core
                            ├── base
                            └── utils
wit-gui/
├── build.gradle
├── Session.vim
└── src
    ├── main
    │   └── java
    │       ├── dev
    │       │   └── joshpetit
    │       │       └── wit
    │       │           └── gui
    │       │               └── launcher
    │       └── module-info.java
    └── test
        └── java
            └── dev
                └── joshpetit
                    └── wit
                        └── gui
                            └── launcer

非常感谢和我一起解析这个问题的人!

如果其他人仍然对此感到疑惑,我建议您遵循@FranciscoMatea 的建议并参考junit 的项目结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM