Gradle任务缺少jar文件的主类

时间:2015-08-28 20:30:19

标签: java gradle jar

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

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')}"  
            }    
        }
    }
}

1 个答案:

答案 0 :(得分:2)

首先,您要混合两个阶段:执行配置。无需为预定义任务添加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类的完全限定(带包)名称。当然,配置阶段中通过classpathmainargs配置的内容将运行仅当if块中的两个表达式求值为true时,执行阶段才会