2012-01-04 29 views
2

在我的Play應用程序中,我使用Reflections(http://code.google.com/p/reflections/)獲取一些字段用特定註釋進行了註釋。Play框架 - 即使在PROD模式下,是否可以強制Play生成.class文件?

思考需要有權訪問.class文件以創建其索引。在DEV模式下,它很好用,因爲Play在tmp/classes中生成.class文件。但在PROD模式下,默認情況下,Play不會生成這些.class文件。因此我的應用程序不起作用!

有沒有辦法強制播放來生成.class文件,即使在PROD模式下?

+0

我發現了一個醜陋的解決方法:https://groups.google.com/d/msg/play-framework/ZkMvMMje46U/pucF0UTZ80QJ。儘管如此,我仍然對更好的解決方案感興趣! – electrotype 2012-01-05 00:06:36

回答

2

你應該嘗試預編譯你的代碼首先使用預編譯發揮。然後用play開始你的應用程序開始-Dprecompiled = true 這應該可以做到。

+0

這實際上有效!在DEV模式下,我告訴Reflections使用「tmp/classes」,並且在PROD模式下部署時,我首先進行預編譯,然後告訴Reflections使用「precompiled/java」作爲.class文件源。謝謝! – electrotype 2012-01-05 20:43:32

0

你檢查了你的「預編譯」目錄嗎?在PROD模式下運行時,類文件放置在這裏。

  • 史蒂夫
+0

即使我使用「-Dprecompiled = true」啓動應用程序,也不生成「預編譯」文件夾。我認爲_you_必須將編譯後的.class文件提供給應用程序以使用「預編譯」選項。這不是我想要的! – electrotype 2012-01-05 12:11:12

0

另一個好的解決方案是使用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,你可以通過編程方式做到這一點。有關詳細信息,請參閱Reflections中的'收集預掃描的元數據'UseCases Wiki