Eclipse的编译器和Sun的javac还真不太一样之前写的 jdk 确实不准确,准确的说法应该是编译器, jdk 的概念太
Eclipse的编译器和Sun的javac还真不太一样
之前写的 jdk 确实不准确,准确的说法应该是编译器, jdk 的概念太大, 这个帖子我主要想说的也只是编译器的
差别,所以改了过来.
------------------- 以下是原文内容,错误文字已经修正 --------------------
众所周知,Eclipse是带有自己的编译器的,而且我们一般都是使用这个默认自带的编译器去编译自己的项目。但是这个编译器和Sun的javac是否一致呢?别说,还真有那么一点区别。
这是一个普通的 annotation:
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Anno {public String itemName();}下面是一个普通的类,使用了这个 annotation:
public class UseAnno{@Anno(itemName="test")public void testMethod() {//}}这两个文件无论是用eclipse还是Sun的javac编译,都不会出错误。下面我们把annotation修改一下:
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Anno {public String itemName();public Integer b = new Integer(2);}然后在 eclipse 里编译,正常通过。运行的时候也不会出错误,而且运行时,用反射的方式也能正确地得到 annotation 里定义的那个变量。
但是如果你用 javac 编译呢?就会出现错误,无法编译,提示:
注释 Anno <clinit> 缺少。
关于 clinit ,大家可以 google 一下资料,我查到的资料是 javac 在处理 clinit 的时候有一些 bug,可能上面这种情况就是这个 bug 的表现症状之一了。
(之所以认为它是编译器的 bug,是因为 eclipse 编译后,在 java 环境中可以正确运行。)
所以:
1、如果可以的话,尽量不使用 eclipse 自带的编译器。
2、如果可以的话,使用 Netbeans 应该是正确的选择,毕竟都是出自Sun的手中。
3、养成持续集成的习惯。否则如果到后期,才发现一些特性在 javac 的编译中会有差别,损失可就大了。
不用在这里jjyy的,楼主把标题和内容都改过了,你根本就没有看到他原来的内容,这种争论根本就没有意义了。 46 楼 liuzhaodong89 2009-01-21 现在很多开发都是用eclipse,不过还真没注意这个问题.还是谢谢楼主提醒 47 楼 icewubin 2009-01-21 fjlyxx 写道其它都还好,最讨厌的就是安全文件.SUN IBM BEA好像自己的安全接口实现都不一样.SUN下RSA加的密在IBM下就是没办法解.
你说的好像是两个问题吧。
后者好像不是加密解密那么简单吧,RSA算法又不是只有一种,SUN JDK下你用了某种算法,换成IBM JDK以后如果那种算法正好碰到曾经的美国“软件出口限制”(RSA密钥不能超过一定长度,但是后来解禁了),较老IBM JDK不带那个算法,只需要下载一个,替换几个jar包就能搞定的。
另外一位网友说的区别就是关键(此句好像很有问题,后来发现这上下不是同一个人fjlyxx么?呵呵。):
fjlyxx 写道
SUN的
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider 这是标准的SUN实现
ibm的
security.provider.1=com.ibm.crypto.hdwrCCA.provider.IBMJCE4758
security.provider.2=com.ibm.crypto.provider.IBMJCE
48 楼 quiii 2009-01-21 - -! 不指定JDK eclipse是没法运行的 怀疑你装的是捆绑jdk的myeclipse 49 楼 icewubin 2009-01-21 quiii 写道- -! 不指定JDK eclipse是没法运行的 怀疑你装的是捆绑jdk的myeclipse
eclipse只要指定JRE,或者有默认的JRE,就能运行,不是一定需要JDK的。 50 楼 whaosoft 2009-01-21 elipse 是有时会有点bug 不过还算不错了 51 楼 xhyccc 2009-01-21 Netbeasn 万岁!!! 52 楼 mikeandmore 2009-01-21 kjj 写道我下载的eclipse 怎么就没有自带jdk ,请问楼主是怎么 “众所周知” 这个事情的!
是ecj啦。。。 53 楼 hantsy 2009-01-22 编译器不一样很正常的,以前Jbuilder中也是使用自己的编译器,jdeveloper也有自己不同之处。 54 楼 wanghui0421 2009-01-22 建议版主关掉此帖,误导太多了.
尤其是对那些JDK和JRE都分不清楚的人.
另外说下,关于java加密方面的回复还算正确. 55 楼 AllenZhang 2009-01-23 从来不用自带jdk 56 楼 wendong007 2009-01-23 <div class="quote_title">AllenZhang 写道</div>
<div class="quote_div">从来不用自带jdk</div>
<p>?</p>
<p>唉,又来了,版主还是把帖子关了吧,省得进行一些无意义的争论</p> 57 楼 yananay 2009-01-23 哎,一开始写错了,真是抱歉阿!可是俺已经修改了主贴的内容。。。。
我想说的也只是编译器的差别。
顺便问一句,怎么关帖子?? 58 楼 孤灯渡漠 2009-01-23 kjj 写道我下载的eclipse 怎么就没有自带jdk ,请问楼主是怎么 “众所周知” 这个事情的!
楼上不是有人做了解释了吗?
不是自带JDK,而是有自己的一套编译指令
编译和jdk有不是一回事
楼上那位仁兄解释的非常清楚 59 楼 unsid 2009-01-23 ......jdk .....java development kits.... “java开发工具包”,能帮助开发java程序的都算开发工具包吧,你要是愿意Eclipse本身看成“java开发工具包”也没问题,不一定非sun那套,现在已经陷入对概念定义的争执上了