2012-01-04 47 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