问题描述
在build.gradle的Gradle 6.3中,可以这样设置mainClassName,而不会产生任何抱怨:
mainClassName = 'mod/app.Main'
在Gradle 6.61中,上一行结果如下:
java.lang.module.InvalidModuleDescriptorException:包mod.app不是 在模块中找到
mainClassName = 'app.Main'
在解决异常后,Gradle仍会声明:
假定当前模块为主要类,则未提供任何模块。 最好以以下格式提供“ mainClassName”: '$ moduleName / a.b.Main'
我已经尝试过这种变化:
ext.moduleName = 'mod'
mainClassName = '${ext.moduleName}/app.Main'
到目前为止,我无法使其中任何一个正常工作。我可以将其设置为“ app.Main”,但我更喜欢使用Gradle首选的变体。应该怎么做?
解决方法
6.3版不支持JPMS,但6.4版以上不支持。因此,我假设您正在使用第三方gradle-modules-plugin。对于此插件,您需要使用1.7.0版或更高版本来支持Gradle的较新版本。
或者,删除插件并在Gradle中使用native support。现在看来,您同时是两者的混合体。
,在6.3 mainClassName = "$moduleName/app.Main"
中工作
在6.4+版本中工作
run {
main = "$moduleName/app.Main"
}