以下は簡単な Scala スクリプトです:
object test {
def hi() { print("hi there from here") }
}
test.hi()
コマンドラインからは、期待どおりに動作します。
scala /shared/scaladem/src/main/scala/test.scala
Loading /shared/scaladem/src/main/scala/test.scala...
defined module test
hi there from here
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
しかし、Intellij 内ではコンパイルエラーが発生します。右クリック | test.scala を実行
expected class or object definition
test.hi()
^
ちなみに、Scala ワークシートとして実行することも試しました。これははるかにひどい結果でした。大量のゴミが出力され、コンパイルに近づくことすらできませんでした。
アップデート: 古いですが似たような質問があるようです:
Intellij Idea 10 で Scala コードを実行する方法
実行構成に入り、指示に従って「Make」のチェックを外しました (面倒でしたが、仕方ありません)。
しかし、その変更を行った後、別のエラーが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Either
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.ClassNotFoundException: scala.Either
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more
注: Scala ライブラリは適切にセットアップされています。
もう一つの更新(以下の @lhuang のコメントの後)私は、最初から別のプロジェクトを作成するという提案に従いました。その場合、Scalaワークシートは正常に動作しました(test.sc)。しかし、scalaスクリプト(「scala test.scala」を介してコマンドラインを実行すると動作します)はまだないこの新しい「scala」プロジェクトでも機能します。
ベストアンサー1
ここでの答えは、次の項目の組み合わせです。
- (a) まったく新しいScalaプロジェクトを作成する(@lhuangの提案に従って)
- (b) スクリプトを実行するときは、実行構成に移動して Make ステップを削除する必要があります (「関連する」SOF の質問に記載されているとおり)。
これは、Intellij とその Scala プラグインの粗い部分を示しています。特に、Scala を Java と統合したい場合、現時点では Intellij を使用しても可能かどうかはわかりません (Scala を組み込もうとするほとんどの Java プロジェクトでは、頻繁に新しい Scala プロジェクトを作成する必要があるため、実現は困難です)。
しかし、Scala ファーストのプロジェクトでは、これは実行可能であると思われます。