java - 如何使用模块化 Java 在 Gradle 6.6 中设置 mainClassName

标签 java gradle build.gradle module-info

在 build.gradle 中的 Gradle 6.3 中,mainClassName 可以这样设置,没有任何提示:

mainClassName = 'mod/app.Main'
在 Gradle 6.61 中,上述行导致:

java.lang.module.InvalidModuleDescriptorException: Package mod.app not found in module


这可以通过删除 mainClassName 的模块部分来解决:
mainClassName = 'app.Main'
虽然异常得到解决,但 Gradle 仍然声明:

No module was provided for main class, assuming the current module. Prefer providing 'mainClassName' in the following format: '$moduleName/a.b.Main'


我已经尝试过这种变化:
ext.moduleName = 'mod'
mainClassName = '${ext.moduleName}/app.Main'
到目前为止,我一直无法让其中任何一个工作。我可以将设置设置为“app.Main”,但我更喜欢使用 Gradle 喜欢的变体。这应该怎么做?

最佳答案

Gradle 6.3 不支持 JPMS,但 6.4+ 支持。所以我假设您使用的是第 3 方 gradle-modules-plugin .对于这个插件,您需要使用版本 1.7.0或更高版本以支持较新版本的 Gradle。
或者,删除插件并使用 native support在 Gradle 中。现在看起来你同时是两者的混合体。

关于java - 如何使用模块化 Java 在 Gradle 6.6 中设置 mainClassName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63934886/

相关文章:

java - 如何在Android开发环境中添加非Android的Java包?

java - 如何在运行 jar 文件时创建文本文件

java - 如何查看 Intellij Idea 中运行的实际命令(java)?

spring - 获取java.lang.IllegalStateException:使用Springs运行Cucumber测试时无法加载CacheAwareContextLoaderDelegate异常

android-studio - 错误 : more than one library with package name 'android.support.graphics.drawable'

java - Spring MVC : Handling data in an One to many relationship?

java - 什么样的设计决策会支持 Scala 的 Actor 而不是 JMS?

spring-boot - 带有私有(private)仓库的 Spring Boot Gradle bootBuildImage 任务

android - 我无法在我的 Android 项目 Android Studio 3.1.3 中使用 volley 库

java - Gradle 包装器 : command not found?