Java 使用maven和ant编译相同的枚举:差异
我用Maven和Ant(Java7)编译了相同的枚举。类文件不同。常量池中某些元素的顺序似乎不同,而且生成的方法具有不同的字节码。Maven的“values()”方法如下所示:Java 使用maven和ant编译相同的枚举:差异,java,maven,ant,enums,Java,Maven,Ant,Enums,我用Maven和Ant(Java7)编译了相同的枚举。类文件不同。常量池中某些元素的顺序似乎不同,而且生成的方法具有不同的字节码。Maven的“values()”方法如下所示: public static de.continentale.vs.common.model.enums.PartnerRolle[] values(); Code: 0: getstatic #1 // Field $VALUES:[Lde/continen
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)是:
我编译的所有枚举似乎都会发生这种情况。知道发生了什么吗 尽管Ant正确地使用了JDK1.7.067,但结果受到Eclipse编译器的影响,后者在后台创建类文件。所以有些“Ant类文件”实际上是Eclipse类文件,Ant没有再次构建它们。Eclipse编译器生成的字节码略有不同。您是否指定了不同的目标JVM版本?您是否使用了不同的编译器/JDK进行编译?它们是否都使用了完全相同的Java版本进行编译?我对这两种编译都使用了JDK1.7.067。目标版本是Java 1.7。您能否分享受Eclipse编译器影响的详细信息。。怎样?还有一个问题是,我从来没有读过编译器的任何细节,如何将其链接到问题的解决方案?对不起,我在12月9日的评论中添加了编译器版本。在激活“buildautomatically”时从Eclipse启动Ant目标会导致某些类使用Eclipse编译器编译的情况。在从命令行开始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