Gradle : :在 sourceSets 中设置 outputDir 时找不到参数的方法 main()

Gradle : :Could not find method main() for arguments" on setting outputDir in sourceSets

请找到下面的脚本以使用 gradle.

清理和构建项目

一切正常,直到我将 outputDir 添加到 java 块中的 sourceSets。

在注释掉 outputDir 行时,gradle 清理和构建成功,但是 class 文件在我不想要的“'build/classes//main'”中生成。我想要目录“'build/classes//'”中的 class 而不是创建主文件夹并将 class 文件放入其中。

apply plugin: 'java'

//Declarations
def projectName="SomeProject"
def projectDir="build//classes"

sourceSets {
   main {
      java {
         srcDir 'src'
         outputDir = file("${projectDir}")
        }
      }
   }


dependencies { 
    compile fileTree(include: ['*.jar'],dir: 'lib')
}


jar{
    manifest {
        attributes 'Main-Class': 'Foo'  
        attributes 'Class-Path': 'lib/com.jcraft.jsch_0.1.31.jar lib/commons-io-2.6.jar lib/commons-net-3.6.jar lib/javax.mail.jar lib/jsch-0.1.54.jar lib/json-simple-1.1.1.jar lib/jxl-2.6.jar lib/ojdbc8.jar'
    }
    baseName = '${projectName}'
}

也尝试使用 outputdir 'build//classes/ 但出现与

相同的错误
Could not find method main() for arguments [build_3eivce3rhjp4go01pnr2m3vvmq$_run_closure1_closure6@87800a] on root project 'SomeProject'.

请提出我遗漏了什么。对我来说似乎是一些基本问题,但无法破解。

查看此文档:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.SourceSetOutput.html

outputDir属性,而不是 方法 ,因此您没有使用正确的语法要设置 属性 值:请改用以下内容:

sourceSets {
    main {
        java {
            srcDir 'src'
            outputDir = file("${projectName}")
        }
    }
}

注意:您在 '${projectName}' 中使用单引号 ' 而不是双引号 quote " :这不能工作,因为你的变量 projectName 不会被评估。