Scalaのmainを定義する通常の方法は、 'scala'ではなく 'java'ではなく(作成されたメソッド静的ではありません)。 'java'で実行できるScalaクラス/オブジェクトを作成するにはどうしたらいいですか?Scala: 'java'で使用できるmainメソッドを定義する
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
Scalaのmainを定義する通常の方法は、 'scala'ではなく 'java'ではなく(作成されたメソッド静的ではありません)。 'java'で実行できるScalaクラス/オブジェクトを作成するにはどうしたらいいですか?Scala: 'java'で使用できるmainメソッドを定義する
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
。あなたは "java"でそれを動かすことができます。あなたができなかった理由は真実ではありません。ここで、「スカラ」の中身を見せてください。
のUnix:
#!/bin/sh
...
exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.classpath="$CLASSPATH" -Denv.emacs="$EMACS" scala.tools.nsc.MainGenericRunner "[email protected]"
のWindows:あなたが定義した同じ名前のクラスを持って起こる場合は
@echo off
...
if "%_JAVACMD%"=="" set _JAVACMD=java
...
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner %_ARGS%
は、あなたに影響を与える可能性がありますバグ、依存がありますあなたが使っているScalaのバージョンで。
最も簡単な方法は、と私は常に使用するものは、オブジェクトを定義することです(あなたが行ったように)が、ない対応する「コンパニオン」クラス。その場合、Scalaコンパイラはクラスのペアを作成します。名前がオブジェクトと正確に同じものは、ランチャーエントリポイントの目的のために必要な静的転送メソッドを含みます。もう一方のクラスにはオブジェクトの名前が$付きで付加されています。これはコードが存在する場所です。詳細について興味があるなら、Javapはこれらのことを明らかにするでしょう。
あなたが望むようしたがって、あなたのHelloWorld
の例は、このことができ、動作します:
% scala pkg.package.more.HelloWorld args that you will ignore
ランドール・シュルツ
私は 'java pkg.package.more.HelloWorld'を行うことができるようにしたい – IttayD
てjavapが実際にあなたのメインは静的であることを示します。
javap HelloWorld
Compiled from "HelloWorld.scala"
public final class HelloWorld extends java.lang.Object{
public static final void main(java.lang.String[]);
public static final int $tag() throws java.rmi.RemoteException;
}
おそらく、クラスパスにScala jarsが必要なのでしょうか?
Stack Overflowについても同様の質問があります: "Creating a jar file from a Scala file"
これは、上記の手順(リンクされた)で動作することを確認しました。
だけを経由して実行します:あなたは間違ってい
java -jar HelloWorld.jar
class HelloWorld
も定義しましたか? Scala 2.7.xには、object HelloWorld
とclass HelloWorld
の両方が定義されているときに、HelloWorld
クラスの静的メソッドが生成されないというバグがあります。
作成されたメソッドが静的ではないため、javaでこのようなことを実行できないと誤って質問されています。できますし、作成されたメソッドは静的です。 –