Scala: определение основного метода, который может использоваться 'Java'

Солярис имеет команда pstack, которая была также скопирована в Linux.

6
задан Peter Mortensen 15 November 2009 в 17:56
поделиться

4 ответа

Вы ошиблись. Вы можете запустить его с помощью «java», и причина, по которой вы это не можете, не соответствует действительности. Здесь позвольте мне показать, что находится внутри "scala".

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  "$@"

Windows:

@echo off
...
if "%_JAVACMD%"=="" set _JAVACMD=java
...
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %_ARGS%

Однако , если у вас есть определенный класс с таким же именем, то есть ошибка, которая может быть влияет на вас, в зависимости от используемой вами версии Scala.

7
ответ дан 8 December 2019 в 13:46
поделиться

javap фактически покажет вам, что ваш main статичен.

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;
}

Возможно, вам просто нужны jar-файлы Scala в вашем пути к классам?

Здесь есть аналогичный вопрос по Stack Overflow: " Создание jar-файла из файла Scala ".

Я только что проверил, что это работает с инструкциями (ссылка) выше.

Просто запустите через:

java -jar HelloWorld.jar
7
ответ дан 8 December 2019 в 13:46
поделиться

Вы также случайно определили класс HelloWorld ? В Scala 2.7.x есть ошибка, которая не позволяет создавать статические методы класса HelloWorld , когда определены оба объекта HelloWorld и класс HelloWorld .

]
0
ответ дан 8 December 2019 в 13:46
поделиться

Самый простой способ, который я всегда использую, - это определить объект (как это сделали вы), но не , соответствующий «сопутствующий» класс. В этом случае компилятор Scala создаст пару классов, тот, чье имя в точности совпадает с именем объекта, будет содержать статические методы пересылки, которые для точек входа в программу запуска являются именно тем, что вам нужно. Другой класс имеет имя вашего объекта с добавленным $, и это место, где находится код. Javap раскроет эти вещи, если вам интересны подробности.

Таким образом, ваш пример HelloWorld будет работать так, как вы хотите, позволяя следующее:

% scala pkg.package.more.HelloWorld args that вы проигнорируете

Рэндалла Шульца

3
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: