2016-08-29 4 views
2

のために実行タスクを実行したとき、私はHelloWorldアプリを作成し、私はビルドタスクを実行するが、実行タスクを実行に失敗することができましたが失敗します。 私は、次のエラーを得た:のGradleは、Scalaの

Could not find or load main class Demo

次は私の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を使用しています。 クラスパスに関連する設定が不足しています。 助けていただければ幸いです。

答えて

2

あなたにも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 } 
    } 
} 
+0

ありがとう!できます。どのようにこの場合のgradleからクラスパスを印刷するか考えています。 _println(classpath)_を実行すると、 "ファイルコレクション"が出力されます。つまり、私は簡単なデバッグをしようとしています。 – Mika16

+2

@ Mika16、私の更新された答えを参照してクラスパスを印刷する。 – Opal

+0

ありがとう、それは動作します。それはdoFirst {}をスキップして、classpath.each {println it} – Mika16

0

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' 
+0

それは動作しません:クラスパスを印刷するには

。この場合、「未知のプロパティmainClassNameを設定できませんでした」というメッセージが表示されます。 – Mika16

+1

元は質問を誤解していました。ソリューションが更新されました。 – Xylotrope