如何使用模块化 Java 在 Gradle 6.6 中设置 mainClassName
How to set mainClassName in Gradle 6.6 with modular Java
在 Gradle 6.3 中 build.gradle,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. For this plugin, you need to use version 1.7.0 或更高版本来支持 Gradle.
的更新版本
或者,删除插件并使用 Gradle 中的 native support。现在看来你是两者兼而有之。
在 6.3 中工作mainClassName = "$moduleName/app.Main"
在 6.4+ 中工作
run {
main = "$moduleName/app.Main"
}
在 Gradle 6.3 中 build.gradle,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. For this plugin, you need to use version 1.7.0 或更高版本来支持 Gradle.
的更新版本或者,删除插件并使用 Gradle 中的 native support。现在看来你是两者兼而有之。
在 6.3 中工作mainClassName = "$moduleName/app.Main"
在 6.4+ 中工作
run {
main = "$moduleName/app.Main"
}