2

Playアプリケーションでは、Reflections(http://code.google.com/p/reflections/)を使用して、特定の注釈で注釈が付けられたいくつかのフィールドを取得します。

リフレクションでは、インデックスを作成するために.classファイルにアクセスできる必要があります。DEVモードでは、Playがtmp / classesに.classファイルを生成するため、うまく機能します。ただし、PRODモードでは、Playはデフォルトでこれらの.classファイルを生成しません。したがって、私のアプリケーションは機能しません!

PRODモードでも、Playに.classファイルを強制的に生成させる方法はありますか?

4

3 に答える 3

2

最初にplayprecompileを使用してコードをプリコンパイルしてみてください。次に、play start -Dprecompiled=trueを指定してアプリケーションを起動します。これでうまくいくはずです。

于 2012-01-05T20:23:20.110 に答える
0

もう1つの優れた解決策は、Reflectionsを使用して、コンパイル時に一度だけメタデータをスキャンしてXMLとして保存し、ブートストラップ時にそのXMLを収集して、スキャンせずにReflectionsを初期化することです。

Mavenを使用している場合は、最初にプラグインを構成する必要があります。

<plugin>
    <groupId>org.reflections</groupId>
    <artifactId>reflections-maven</artifactId>
    <version>0.9.8</version>
    <executions>
        <execution>
            <goals>
                <goal>reflections</goal>
            </goals>
            <phase>process-classes</phase>
        </execution>
    </executions>
</plugin>

そして、ブートストラップよりも:

Reflections reflections =
            isProduction() ? Reflections.collect() : new Reflections("your.package.here");

Mavenを使用していない場合は、プログラムで実行できます。詳細については、ReflectionsUseCasesWikiの「事前にスキャンされたメタデータを収集する」を参照してください

于 2013-03-10T10:13:08.853 に答える
0

「プリコンパイル済み」ディレクトリを確認しましたか?PRODモードで実行している場合、クラスファイルはここに配置されます。

  • スティーブ
于 2012-01-05T11:37:27.813 に答える