近期项目中需要反编译修改多年前的class文件,经过反编译并修改后,用Eclipse编译和java命令行得到的class文件不同,对新class文件反编译后如下:
用Eclipse编译的class文件反编译:
package com.langchao.kpiengine.builder.baskpi;
import com.langchao.kpiengine.model.common.BasDimensionType;
import com.langchao.kpiengine.model.common.Kpi;
import com.langchao.kpiengine.model.common.KpiRelation;
import com.langchao.kpiengine.model.common.UnitKpi;
import com.langchao.kpiengine.search.BasKpiDefine;
import com.langchao.kpiengine.util.KpiConfigHelper;
import com.langchao.kpiengine.xml.digester.DigesterUtil;
import com.langchao.kpiengine.xml.digester.KpiDigester;
import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class BasKpiDefineDaoXmlImpl
implements BasKpiDefineDao
{
private static Log log = LogFactory.getLog("KpiQueryService");
public static final String RULE_CONFIG;
public static final String DEFINE_CONFIG;
private BasKpiDefine basKpiDefine;
static Class class$0;
// ERROR //
static
{
// Byte code:
// 0: ldc 20
// 2: invokestatic 22 org/apache/commons/logging/LogFactory:getLog (Ljava/lang/String;)Lorg/apache/commons/logging/Log;
// 5: putstatic 28 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:log Lorg/apache/commons/logging/Log;
// 8: new 30 java/lang/StringBuffer
// 11: dup
// 12: getstatic 32 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0 Ljava/lang/Class;
// 15: dup
// 16: ifnonnull +28 -> 44
// 19: pop
// 20: ldc 34
// 22: invokestatic 36 java/lang/Class:forName (Ljava/lang/String;)Ljava/lang/Class;
// 25: dup
// 26: putstatic 32 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0 Ljava/lang/Class;
// 29: goto +15 -> 44
// 32: new 42 java/lang/NoClassDefFoundError
// 35: dup_x1
// 36: swap
// 37: invokevirtual 44 java/lang/Throwable:getMessage ()Ljava/lang/String;
// 40: invokespecial 50 java/lang/NoClassDefFoundError:<init> (Ljava/lang/String;)V
// 43: athrow
// 44: invokevirtual 54 java/lang/Class:getPackage ()Ljava/lang/Package;
// 47: invokevirtual 58 java/lang/Package:getName ()Ljava/lang/String;
// 50: invokestatic 63 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String;
// 53: invokespecial 69 java/lang/StringBuffer:<init> (Ljava/lang/String;)V
// 56: ldc 70
// 58: invokevirtual 72 java/lang/StringBuffer:append (Ljava/lang/String;)Ljava/lang/StringBuffer;
// 61: invokevirtual 76 java/lang/StringBuffer:toString ()Ljava/lang/String;
// 64: putstatic 79 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:RULE_CONFIG Ljava/lang/String;
// 67: new 30 java/lang/StringBuffer
// 70: dup
// 71: getstatic 32 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0 Ljava/lang/Class;
// 74: dup
// 75: ifnonnull +28 -> 103
// 78: pop
// 79: ldc 34
// 81: invokestatic 36 java/lang/Class:forName (Ljava/lang/String;)Ljava/lang/Class;
// 84: dup
// 85: putstatic 32 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0 Ljava/lang/Class;
// 88: goto +15 -> 103
// 91: new 42 java/lang/NoClassDefFoundError
// 94: dup_x1
// 95: swap
// 96: invokevirtual 44 java/lang/Throwable:getMessage ()Ljava/lang/String;
// 99: invokespecial 50 java/lang/NoClassDefFoundError:<init> (Ljava/lang/String;)V
// 102: athrow
// 103: invokevirtual 81 java/lang/Class:getName ()Ljava/lang/String;
// 106: invokestatic 63 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String;
// 109: invokespecial 69 java/lang/StringBuffer:<init> (Ljava/lang/String;)V
// 112: ldc 82
// 114: invokevirtual 72 java/lang/StringBuffer:append (Ljava/lang/String;)Ljava/lang/StringBuffer;
// 117: invokevirtual 76 java/lang/StringBuffer:toString ()Ljava/lang/String;
// 120: putstatic 84 com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:DEFINE_CONFIG Ljava/lang/String;
// 123: return
//
// Exception table:
// from to target type
// 20 25 32 java/lang/ClassNotFoundException
// 79 84 91 java/lang/ClassNotFoundException
}
用java命令行执行(如图):
C:\j2sdk1.4.2_16\bin>javac
–classpath .;kpimodelbuild.jar;commons-logging.jar;kpimodel.jar;commons-digester.jar;sax.jar;zhibiaoutil.jar
BasKpiDefineDaoXmlImpl.java
对用命令行新生成的class反编译:
package com.langchao.kpiengine.builder.baskpi;
import com.langchao.kpiengine.model.common.BasDimensionType;
import com.langchao.kpiengine.model.common.Kpi;
import com.langchao.kpiengine.model.common.KpiRelation;
import com.langchao.kpiengine.model.common.UnitKpi;
import com.langchao.kpiengine.search.BasKpiDefine;
import com.langchao.kpiengine.util.KpiConfigHelper;
import com.langchao.kpiengine.xml.digester.DigesterUtil;
import com.langchao.kpiengine.xml.digester.KpiDigester;
import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class BasKpiDefineDaoXmlImpl
implements BasKpiDefineDao
{
private static Log log = LogFactory.getLog("KpiQueryService");
public static final String RULE_CONFIG = BasKpiDefineDaoXmlImpl.class.getPackage().getName() + ".ruleconfig";
public static final String DEFINE_CONFIG = BasKpiDefineDaoXmlImpl.class.getName() + ".defineconfig";
private BasKpiDefine basKpiDefine;
经比对,Eclipse生成的对应的public static final String 静态常量的值在反编译后都没有了,而使用java命令行的反编译后正常。
问题找到了,但是原因未知。