将java项目导出到jar时出错

将java项目导出到jar时出错,java,jar,Java,Jar,我有一个问题,我不明白为什么eclipse会这样做。我在java类中有一个名为Cliente的方法。一切都进行得很顺利,但是当我导出jar时,我看到了带有反编译器的代码,我不明白为什么这个方法不好。我的方法中的一些代码: public RespuestaEnvio enviar(Envio mensaje){ log.info(modulo, "Preparando el envío del mensaje: "+mensaje.getMensaje()); S

我有一个问题,我不明白为什么eclipse会这样做。我在java类中有一个名为
Cliente
的方法。一切都进行得很顺利,但是当我导出jar时,我看到了带有反编译器的代码,我不明白为什么这个方法不好。我的方法中的一些代码:

 public RespuestaEnvio enviar(Envio mensaje){
    log.info(modulo, "Preparando el envío del mensaje: "+mensaje.getMensaje());
            String mensajeError = "";
            boolean descartar = false;
            BeanCambioSituacion beanCambioSituacion = new BeanCambioSituacion(mensaje);
            // Se validan campos obligatorios
            if(isVacia(beanCambioSituacion.getCodigoPedido())){
                log.error(modulo, "Código de pedido sin valor.");
                descartar = true;
            } 

            if(isVacia(beanCambioSituacion.getNumeroEnvio())){
                log.error(modulo, "Número de envío sin valor.");
                descartar = true;
            }

This method with a decompiler seeing the code:

/* Error */
  public gestionEventos.RespuestaEnvio enviar(gestionEventos.Envio mensaje)
  {


// Byte code:
//   0: aload_0
//   1: getfield 49 es/chx/ws/eci/cambiaEstado/Cliente:log  Les/chx/ws/eci/domain/LogUtil;
//   4: aload_0
//   5: getfield 41 es/chx/ws/eci/cambiaEstado/Cliente:modulo   Ljava/lang/String;
//   8: new 116 java/lang/StringBuilder
//   11: dup
//   12: ldc -15
//   14: invokespecial 120  java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
//   17: aload_1
//   18: invokevirtual 243  gestionEventos/Envio:getMensaje ()Ljava/lang/String;
//   21: invokevirtual 121  java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
//   24: invokevirtual 131  java/lang/StringBuilder:toString    ()Ljava/lang/String;
//   27: invokevirtual 134  es/chx/ws/eci/domain/LogUtil:info   (Ljava/lang/String;Ljava/lang/String;)V
//   30: ldc -114
//   32: astore_2
//   33: iconst_0
//   34: istore_3
//   35: new 248    es/chx/ws/eci/bean/BeanCambioSituacion
//   38: dup
//   39: aload_1
//   40: invokespecial 250  es/chx/ws/eci/bean/BeanCambioSituacion:<init>   (LgestionEventos/Envio;)V
//   43: astore 4
//   45: aload_0
//   46: aload 4
//   48: invokevirtual 253  es/chx/ws/eci/bean/BeanCambioSituacion:getCodigoPedido  ()Ljava/lang/String;
//   51: invokevirtual 256  es/chx/ws/eci/cambiaEstado/Cliente:isVacia  (Ljava/lang/String;)Z
//   54: ifeq +19 -> 73
//   57: aload_0.
公共响应Envio enviar(Envio mensaje){
log.info(模数,“Preparando el envío del mensaje:+mensaje.getMensaje());
字符串mensajeError=“”;
布尔笛卡尔=假;
BeanCambioSituacion BeanCambioSituacion=新的BeanCambioSituacion(mensaje);
//瓦利丹·坎波斯义务酒店
if(isVacia(beanCambioSituacion.getCodigoPedido()){
对数误差(模,“Código de pedido sin valor.”);
笛卡尔=真;
} 
if(isVacia(beanCambioSituacion.getNumeroEnvio()){
log.error(模,“Número de envío sin valor.”);
笛卡尔=真;
}
此方法使用反编译器查看代码:
/*错误*/
公共管理文托斯·RespuestaEnvio enviar(管理文托斯·Envio mensaje)
{
//字节码:
//0:aload_0
//1:getfield49-es/chx/ws/eci/cambiaEstado/Cliente:log-Les/chx/ws/eci/domain/LogUtil;
//4:aload_0
//5:getfield41es/chx/ws/eci/cambiaEstado/Cliente:modulo Ljava/lang/String;
//8:新的116 java/lang/StringBuilder
//11:dup
//12:最不发达国家-15
//14:invokespecial 120 java/lang/StringBuilder:(Ljava/lang/String;)V
//17:aload_1
//18:invokeVirtual243 gestionEventos/Envio:getMensaje()Ljava/lang/String;
//21:invokeVirtual121 java/lang/StringBuilder:append(Ljava/lang/String;)Ljava/lang/StringBuilder;
//24:invokevirtual131 java/lang/StringBuilder:toString()Ljava/lang/String;
//27:invokevirtual134 es/chx/ws/eci/domain/LogUtil:info(Ljava/lang/String;Ljava/lang/String;)V
//30:ldc-114
//32:astore_2
//33:iconst_0
//34:istore_3
//35:248新es/chx/ws/eci/bean/Beancambiostiacion
//38:dup
//39:aload_1
//40:invokespecial 250 es/chx/ws/eci/bean/BeanCambioSituacion:(LgestionEventos/Envio;)V
//43:astore 4
//45:aload_0
//46:aload 4
//48:invokevirtual253es/chx/ws/eci/bean/BeanCambioSituacion:getCodigoPedido()Ljava/lang/String;
//51:invokevirtual 256 es/chx/ws/eci/cambiaEstado/Cliente:isVacia(Ljava/lang/String;)Z
//54:ifeq+19->73
//57:aload_0。

任何人都可以提供一些信息,我不明白为什么会发生这种情况。代码完全不同。这是我的问题。为什么当我导出java项目时,方法内部的代码不同?

java就是这样工作的:)

您使用java语言编写代码。您(或eclipse)使用java编译器(javac)编译该代码,它将生成jvm字节码。字节码用作java虚拟机(jvm)的输入,该虚拟机能够解释和执行它

当您打开编译并绑定的jar时,您将看到字节码。 通过一些幻想/知识,您实际上可以看到它仍然是您的代码:

例如:

  • 记录某事

    /domain/LogUtil;
    4: aload_0
    5: getfield 41 es/chx/ws/eci/cambiaEstado/Cliente:modulo   Ljava/lang/String;
    
  • 结合日志消息和mensaje.getMensaje()的输出

您声明您使用反编译器打开了jar 字节码我怀疑你的反编译器设置是否正确。
像jad这样的反编译器(以及eclipse的jadclipse插件)从字节码生成java代码。由于编译时优化以及不同java程序可以生成相同字节码的事实,您很可能无法获得用于编译的相同java代码。

欢迎使用堆栈溢出!我编辑了您的问题,将您的输出适当缩进4个空格,以便呈现pr操作-有关格式的更多信息,请参阅编辑帮助。我还修复了一些小的语法错误。祝你好运!
8: new 116 java/lang/StringBuilder
11: dup
12: ldc -15
14: invokespecial 120  java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
17: aload_1
18: invokevirtual 243  gestionEventos/Envio:getMensaje ()Ljava/lang/String;
21: invokevirtual 121  java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
24: invokevirtual 131  java/lang/StringBuilder:toString    ()Ljava/lang/String;
27: invokevirtual 134  es/chx/ws/eci/domain/LogUtil:info   (Ljava/lang/String;Ljava/lang/String;)V
...
35: new 248    es/chx/ws/eci/bean/BeanCambioSituacion
...