1

http://groovyconsole.appspot.com/で次の実験的なコードサブセットを実行すると

class FileHandler {
    def rootDir

    FileHandler(String batchName) {
        rootDir = '.\\Results\\'+batchName+'\\'
    }
}

//def fileHandler = new FileHandler('Result-2012-12-15-10-48-55')

例外の結果:

java.lang.NoSuchMethodException: FileHandler.<init>()

クラスをインスタンス化する最後の行のコメントを外すと、エラーはなくなります。

誰かがこれがなぜであるか説明できますか?私は基本的に、クラスの定義とインスタンス化を2つのファイルに分離して、別々に評価しようとしています。ありがとう

4

1 に答える 1

2

http://groovyconsole.appspot.com/の背後にある正確な実装の詳細はわかりません(そこからリンクされているソースは、私が調べていないGaelykを指しています)。実行可能なものを見つけるために、提示したクラスの引数なしのコンストラクターを探しているに違いありません。(それを提供した場合でも、main():/が必要なため、機能しないことに注意してください)

groovyConsoleでローカルに実行すると、次のエラーメッセージが表示され、少し早く終了します。

groovy.lang.GroovyRuntimeException: This script or class could not be run. It should either:
- have a main method,
- be a JUnit test or extend GroovyTestCase,
- implement the Runnable interface,
- or be compatible with a registered script runner.

これはおそらくより説明的で要点です。Groovyを単純なスクリプトとして実行する場合は、ジャンプインポイントを指定する必要があります。最も簡単な方法は、クラス定義の外にあるgroovyファイル内の実行可能ステートメントです(たとえば、インスタンス化ステートメントのコメントを解除します)。mainまたは、メソッドを持つクラスがそれを行う必要があります。(ここを参照)。

2つのファイルを分割する方法である場合は、クラスファイルdefを1つのgroovyファイル(たとえば)に保存し、実行可能ステートメントだけFirst.groovyで2番目のファイル(たとえば)を作成できます。(両方が同じディレクトリにある場合、Second.groovy実行時に最初のものが自動的にクラスパスに含まれると思います)groovy Second

于 2012-12-28T04:05:03.693 に答える