当执行scala的运行任务时,Gradle失败

时间:2016-08-29 22:45:10

标签: scala gradle

我创建了一个HelloWorld应用,我能够执行 build 任务但无法执行运行任务。 我收到以下错误:

  

无法找到或加载主类演示

以下是我的build.gradle文件:

apply plugin: 'scala'
repositories{
    mavenCentral()
    mavenLocal()
}
dependencies{
    compile 'org.slf4j:slf4j-api:1.7.5'
    compile "org.scala-lang:scala-library:2.11.2"
    testCompile "junit:junit:4.11"
}
task run(type: JavaExec, dependsOn: classes) {
    main = 'Demo'
}

我的源代码 Demo.scala

object Demo {
   def main(args: Array[String]) {
        println("Helo World")
   }
}

我的文件结构:

build
src\main\scala\Demo.scala
build.gradle

我使用的是gradle 3.0和Java 1.8.0_91。 在我看来,我错过了一些与 classpath 相关的设置。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

您还需要提供classpath。将run任务声明更改为:

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

它会正常工作。 Demo

打印类路径:

task run(type: JavaExec, dependsOn: classes) {
    main = 'Demo'
    classpath = sourceSets.main.runtimeClasspath
    doFirst {
      classpath.each { println it }
    }
}

答案 1 :(得分:2)

您可以使用Gradle应用程序插件,它将自动添加运行任务。然后只需指定主类:

mainClassName = "Demo"

你build.gradle会是这样的:

apply plugin: 'scala'
apply plugin: 'application'
repositories{
    mavenCentral()
    mavenLocal()
}
dependencies{
    compile 'org.slf4j:slf4j-api:1.7.5'
    compile "org.scala-lang:scala-library:2.11.2"
    testCompile "junit:junit:4.11"
}


mainClassName = 'Demo'