Gradle 任务缺少 jar 文件的主要 class

Main class for jar file missing for Gradle task

我一直在尝试执行一个 jar 文件 ssr.runner,jar 使用类型为 JavaExec 的任务。但是 gradle 给我的错误是 no main class specified。我是 gradle 的新手,所以如果有人可以详细说明,那就太好了。这是我写的任务:

task executeSqlScriptRunnerBeforeTenantCreation(type:JavaExec) {
    description "Execute ssr.runner to install certificates into the device"
    doLast {
        if(scriptRunnerVariables.get('SSR_INTERSECT_MOCK') == 'true') {

            println "Executing SQL Script Runner..."
            println "Adding certificates for mocked intersect service"

            if(scriptRunnerVariables.get('SSR_DB_TYPE') == 'SQL_SERVER') {
                classpath =  file("{$workingDir}\ssr.runner.jar")
                main =  '-jar' 
                args '-dbtype', "${scriptRunnerVariables.get('SSR_DB_TYPE')}", '-dbhost', "${scriptRunnerVariables.get('SSR_DB_HOST')}", '-dbinstance', 
                "${scriptRunnerVariables.get('SSR_DB_INSTANCE')}", '-dbname', "${scriptRunnerVariables.get('SSR_DB_NAME')}", '-dbuser', "${scriptRunnerVariables.get('SSR_DB_USER')}",
                '-dbpass', "${scriptRunnerVariables.get('SSR_DB_PASS')}", '-sqlscriptpath', "${scriptRunnerVariables.get('SSR_INTERSECT_MOCK_DB_SCRIPT')}"  
            }    
        }
    }
}

首先,您要混合两个阶段:执行配置。无需为预定义任务添加 doLast。参见 here。那么脚本(可能)应该是这样的:

task executeSqlScriptRunnerBeforeTenantCreation(type:JavaExec) {
    description "Execute ssr.runner to install certificates into the device"

    if(scriptRunnerVariables.get('SSR_INTERSECT_MOCK') == 'true') {
        println "Configuring SQL Script Runner..."
        println "Adding certificates for mocked intersect service"

        if(scriptRunnerVariables.get('SSR_DB_TYPE') == 'SQL_SERVER') {
            main = '<FULLY QUALIFIED NAME OF CLASS YOU NEED TO RUN>' 
            classpath =  file("{$workingDir}\ssr.runner.jar")            
            args '-dbtype', 
                 "${scriptRunnerVariables.get('SSR_DB_TYPE')}", 
                 '-dbhost', 
                 "${scriptRunnerVariables.get('SSR_DB_HOST')}", 
                 '-dbinstance', 
                 "${scriptRunnerVariables.get('SSR_DB_INSTANCE')}", 
                 '-dbname', 
                 "${scriptRunnerVariables.get('SSR_DB_NAME')}", 
                 '-dbuser', 
                 "${scriptRunnerVariables.get('SSR_DB_USER')}",
                 '-dbpass', 
                 "${scriptRunnerVariables.get('SSR_DB_PASS')}", 
                 '-sqlscriptpath', 
                 "${scriptRunnerVariables.get('SSR_INTERSECT_MOCK_DB_SCRIPT')}"  
            }
        }
    }
}

main 配置错误应该有 java class 的完全限定(带包)名称,您需要 运行 通过。当然,什么是configured via classpath, main, args等等configuration阶段仅当 if 块中的两个表达式的计算结果为真时, 运行 才会在 执行 阶段。