3

主に POJO と値オブジェクトである多くのクラスの定型文を減らすために、いくつかの Groovy クラスを Maven で構築した Spring アプリケーションに組み込み始めています。(比較のために、私は定型文を処理するために Roo を使用していますが、Roo は Spring と Maven の新しいバージョンでますます不安定になっています。) 私の Spring Data MongoDB クラスの 1 つは次のようになります。

@Document
class ConcreteProcessingJob implements ImageAssetProcessingJob {

    @Id
    String id

    @Indexed(unique = true, sparse = true)
    String jobId

    @NotNull
    @Past
    Date started

    // more of the same
}

これらはごくありふれた構造体オブジェクトにすぎないため、Groovy のメタクラス化と呼び出し位置設定の複雑さとオーバーヘッドは必要ありません。POJOに相当するものが欲しいだけです。クラスに で注釈を付けようとしまし@CompileStaticたが、バイトコード内のいくつかの呼び出しが に置き換えられましたinvokedynamicが、いくつかの大きな Groovy メソッドとデータ構造を含むinvokevirtual巨大なファイルをまだ取得しています。.class汎用スーパークラスを具体化する空のサブクラスに過ぎない 1 つのクラスは、5k を超えるバイトコードです。

Eclipse 内とコマンド ラインの両方からgroovy-eclipse-compiler(2.8.0-01) を使用してコードをコンパイルしましたが、多少の違いはありますが、バイトコードには動的な「膨張」がすべて含まれています。私が取り込んでいる Groovy 依存関係は 2.3.2 で、Java ターゲットを 1.7 に設定しています。

@CompileStaticGroovy メタデータとコードのすべてがコンパイルされているとマークされたクラス全体でさえ期待されますか? もしそうなら、それを無効にする他の方法はありますか?

4

0 に答える 0