Java和Gradle是否具有不同的模块源结构?

问题描述 投票:0回答:1

我在Gradle看到,我们宣布一个模块为artifact/src/main/java/module-info.java,但在OpenJDK,他们宣称它为src/com.group.artifact/module-info.java。然后在Jenkov我们有src/main/java/com.group.artifact/module-info.java

我很困惑,我应该使用哪一个?我有一个包含多个子项目的Gradle项目。我正在尝试将子项目用作模块。当我使用Jenkov方法时,IntelliJ IDEA会出错,我必须切换到Gradle 1。它是一样的吗?

java gradle java-module
1个回答
2
投票

OpenJDK和Gradle对于构造源代码只有不同的约定。由于您使用的是Gradle(以及Gradle的Java语言插件),因此您应该遵循它的约定。 Gradle的Java语言插件将自动编译src/main/java目录中的代码。

假设你有两个模块,com.example.moduleonecom.example.moduletwo,你的项目结构应如下所示:

build.gradle
settings.gradle
com.example.moduleone
└──src
   └──main
      └──java
         ├──{PACKAGES_AND_CODE}
         └──module-info.java
com.example.moduletwo
└──src
   └──main
      └──java
         ├──{PACKAGES_AND_CODE}
         └──module-info.java

不使用Gradle并使用javac -d out --module-source-path src -m com.example.moduleone,com.example.moduletwo自行编译项目,它应如下所示:

src
├──com.example.moduleone
|  ├──{PACKAGES_AND_CODE}
|  └──module-info.java
└──com.example.moduletwo
   ├──{PACKAGES_AND_CODE}
   └──module-info.java

至于'Jenkov方法':我以前从未见过这种结构,它看起来像一个奇怪的混合物,我建议不要使用它。它可能只会让其他开发人员感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.