V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
misaka19000
V2EX  ›  编程

同样的 Java 文件,为什么直接用 Javac 编译和使用 Maven 编译出来所得到的字节码不一样?

  •  
  •   misaka19000 · 2016-10-13 17:10:43 +08:00 · 4420 次点击
    这是一个创建于 2757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图,上面的是直接编译的结果,下面是用 Maven 编译的结果,为什么结果会不一样?

    直接编译结果:

    cafe babe 0000 0033 000f 0a00 0300 0c07
    000d 0700 0e01 0006 3c69 6e69 743e 0100
    0328 2956 0100 0443 6f64 6501 000f 4c69
    6e65 4e75 6d62 6572 5461 626c 6501 0004
    6d61 696e 0100 1628 5b4c 6a61 7661 2f6c
    616e 672f 5374 7269 6e67 3b29 5601 000a
    536f 7572 6365 4669 6c65 0100 0954 6573
    742e 6a61 7661 0c00 0400 0501 0011 636f
    6d2f 6471 742f 7465 7374 2f54 6573 7401
    0010 6a61 7661 2f6c 616e 672f 4f62 6a65
    6374 0020 0002 0003 0000 0000 0002 0000
    0004 0005 0001 0006 0000 001d 0001 0001
    0000 0005 2ab7 0001 b100 0000 0100 0700
    0000 0600 0100 0000 0200 0900 0800 0900
    0100 0600 0000 1f00 0100 0200 0000 0303
    3cb1 0000 0001 0007 0000 000a 0002 0000
    0004 0002 0005 0001 000a 0000 0002 000b
    

    Maven 编译:

    cafe babe 0000 0031 0016 0a00 0300 1307
    0014 0700 1501 0006 3c69 6e69 743e 0100
    0328 2956 0100 0443 6f64 6501 000f 4c69
    6e65 4e75 6d62 6572 5461 626c 6501 0012
    4c6f 6361 6c56 6172 6961 626c 6554 6162
    6c65 0100 0474 6869 7301 0013 4c63 6f6d
    2f64 7174 2f74 6573 742f 5465 7374 3b01
    0004 6d61 696e 0100 1628 5b4c 6a61 7661
    2f6c 616e 672f 5374 7269 6e67 3b29 5601
    0004 6172 6773 0100 135b 4c6a 6176 612f
    6c61 6e67 2f53 7472 696e 673b 0100 0169
    0100 0149 0100 0a53 6f75 7263 6546 696c
    6501 0009 5465 7374 2e6a 6176 610c 0004
    0005 0100 1163 6f6d 2f64 7174 2f74 6573
    742f 5465 7374 0100 106a 6176 612f 6c61
    6e67 2f4f 626a 6563 7400 2000 0200 0300
    0000 0000 0200 0000 0400 0500 0100 0600
    0000 2f00 0100 0100 0000 052a b700 01b1
    0000 0002 0007 0000 0006 0001 0000 0002
    0008 0000 000c 0001 0000 0005 0009 000a
    0000 0009 000b 000c 0001 0006 0000 003b
    0001 0002 0000 0003 033c b100 0000 0200
    0700 0000 0a00 0200 0000 0400 0200 0500
    0800 0000 1600 0200 0000 0300 0d00 0e00
    0000 0200 0100 0f00 1000 0100 0100 1100
    0000 0200 12
    
    10 条回复    2016-10-13 22:09:24 +08:00
    ilanyu
        1
    ilanyu  
       2016-10-13 18:11:43 +08:00   ❤️ 3
    上面的是 JDK 1.7 ,下面是 1.5
    ob
        2
    ob  
       2016-10-13 18:38:48 +08:00 via iPhone
    @ilanyu 卧槽,怎么看出来的?
    LaudOak
        3
    LaudOak  
       2016-10-13 18:41:10 +08:00 via Android
    @ilanyu 膜拜
    winooxx
        4
    winooxx  
       2016-10-13 18:43:20 +08:00
    @ilanyu 今天份的膝盖给你了
    misaka19000
        5
    misaka19000  
    OP
       2016-10-13 19:06:49 +08:00
    @ilanyu 对,但是不知道为什么会这样? Maven 调用的难道不是环境变量 JAVA_HOME 对应的 Java 程序吗?
    misaka19000
        6
    misaka19000  
    OP
       2016-10-13 19:07:22 +08:00
    @ob
    @LaudOak
    @winooxx
    看 33 和 31
    arrow2015
        7
    arrow2015  
       2016-10-13 19:25:52 +08:00 via Android
    cafe babe. byte code
    daya
        8
    daya  
       2016-10-13 19:31:30 +08:00 via Android
    @ilanyu 膜拜
    kaneg
        9
    kaneg  
       2016-10-13 22:05:07 +08:00 via iPhone
    你用的应该是 jdk1.7 , javac 编译出的默认和自己的版本一样, maven 则是在 pom 中控制的,估计你的 pom 中写的是 1.5
    SoloCompany
        10
    SoloCompany  
       2016-10-13 22:09:24 +08:00   ❤️ 1
    maven 不配置 plugin 的情况下默认是 -source 1.5 -target 1.5
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2235 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:19 · PVG 12:19 · LAX 21:19 · JFK 00:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.