java – 使用maven与ant编译相同的枚举:差异

我用Maven和Ant(
Java 7)编译了相同的枚举.类文件不同.常量池中某些元素的顺序似乎不同,而且生成的方法具有不同的字节码.对于Maven,“values()”方法如下所示:

public static de.continentale.vs.common.model.enums.PartnerRolle[] values();
    Code:
       0: getstatic     #1                  // Field $VALUES:[Lde/continentale/vs/common/model/enums/PartnerRolle;
       3: invokevirtual #2                  // Method "[Lde/continentale/vs/common/model/enums/PartnerRolle;".clone:()Ljava/lang/Object;
       6: checkcast     #3                  // class "[Lde/continentale/vs/common/model/enums/PartnerRolle;"
       9: areturn     

另一个版本(Ant)是这样的:

 public static de.continentale.vs.common.model.enums.PartnerRolle[] values();
    Code:
       0: getstatic     #115                // Field ENUM$VALUES:[Lde/continentale/vs/common/model/enums/PartnerRolle;
       3: dup           
       4: astore_0      
       5: iconst_0      
       6: aload_0       
       7: arraylength   
       8: dup           
       9: istore_1      
      10: anewarray     #1                  // class de/continentale/vs/common/model/enums/PartnerRolle
      13: dup           
      14: astore_2      
      15: iconst_0      
      16: iload_1       
      17: invokestatic  #147                // Method java/lang/System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
      20: aload_2       
      21: areturn

这似乎发生在我编译的所有枚举上.知道发生了什么事吗?

最佳答案 尽管Ant正确使用了jdk 1.7.0_67,但结果却受到Eclipse编译器的影响,后者在后台创建了类文件.因此,一些“Ant类文件”实际上是Ant类没有重新构建的Eclipse类文件. Eclipse编译器生成稍微不同的字节码.

点赞