Gradle 构建中缺少 mainClassName 属性的 Gradle 错误

新手上路,请多包涵

我有两个子项目的 graddle 配置,当我想要 构建 项目时,会抛出以下错误:

 Executing external task 'build'...
:core:compileJava
:core:processResources UP-TO-DATE
:core:classes
:core:jar
:core:startScripts FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':core:startScripts'.
> No value has been specified for property 'mainClassName'.

我的配置:ROOT - build.gradle:

 subprojects {

    apply plugin: 'java'
    apply plugin: 'application'

    group = 'pl.morecraft.dev.morepianer'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    run {
        main = project.getProperty('mainClassName')
    }

    jar {
        manifest {
            attributes 'Implementation-Title': project.getProperty('name'),
                    'Implementation-Version': project.getProperty('version'),
                    'Main-Class': project.getProperty('mainClassName')
        }
    }

}

task copyJars(type: Copy, dependsOn: subprojects.jar) {
    from(subprojects.jar)
    into project.file('/jars')
}

ROOT - setting.gradle:

 include 'app'
include 'core'

应用程序项目 - build.gradle:

EMPTY

核心项目 - build.gradle:

 dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}

以及两个子项目(类似)- gradle.properties:

 version = 0.1-SNAPSHOT
name = MorePianer Core Lib
mainClassName = pl.morecraft.dev.morepianer.core.Core

我尝试在很多地方添加 mainClassName 属性,但它不起作用。这甚至更奇怪,它在几天前就按原样工作了。我是第一次使用 gradle,我正在考虑切换回 maven。

原文由 Mateusz Stefaniak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

application 插件在捆绑应用程序时需要知道主类。

在您的情况下,您为每个子项目应用了 application 插件,而没有为每个子项目指定主类。

我遇到了同样的问题,并通过在与 apply plugin: 'application' 相同的级别指定“mainClassName”来修复它:

 apply plugin: 'application'
mainClassName = 'com.something.MyMainClass'

如果你想在 gradle.properties 文件中指定它,你可能必须将它写成: projectName.mainClassName = ..

原文由 zlandorf 发布,翻译遵循 CC BY-SA 3.0 许可协议

而不是设置 mainClassName 尝试创建

task run(type: JavaExec, dependsOn: classes) {
    main = 'com.something.MyMainClass'
    classpath = sourceSets.main.runtimeClasspath
}

请查看 Gradle fails when executes run task for scala

原文由 Mika16 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题