关于java编译器的稀奇事

runfriends 2012-05-16 12:29:42
最近遇到的稀奇事
windows下用eclipse编译的工程可在windows下用tomcat启动。
在linux下用svn检出后再用ant编译,不能用tomcat启动。
把在window下编译的class文件复制到linux,可在linux下用tomcat启动。

后来发现ant默认采用jdk自带编译器编译。eclipse有自己的编译器实现(jdt),而且不可替换。tomcat使用jdt编译jsp。

我又把ant的编译器设置成jdt编译器,编译提示信息发生了变化说明替换成功,但还是不能在linux下成功启动。
...全文
155 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
runfriends 2012-05-23
  • 打赏
  • 举报
回复
楼上的说法我都试过了。说明不了什么
lxbccsu 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:

你直接把ant的target(javac)设为SUN JDK中javac,在windows和linux平台上分别编译和运行、测试;
然后在部署web application前测试linuxs上的tomcat能正常启动;
最后把war包(或*.class)放入tomcat运行;

而上面的“实际是在linux编译的class文件不能再linux启动”:
你就c……
[/Quote]
实在是搞不懂,就不能仔细理解和变通?
你先测试保证程序在linux通过,也就是先保证了程序无错误,环境正确;
然后把编译器改为jdt,如果能正确编译,且产生的*.class在windows和linux都能运行,就OK;
如果在window能运行,linux不能,那把linux下*.class copy到window下测试(保证JVM(Sun的)一样),如果能运行,说明linux下的JVM(Sun的)不兼容linux下jdt编译产生的 *.class, 这样直接找jdt官方帮助文档;
如果不能运行,说明linux下jdt产生的*.class在window和linux下的JVM(Sun的)中都不兼容;你可以放心了,就是这个linux下的jdt有问题;

不是说Java跨平台,就是这些*.class,JVM,一些Java语言特性等保证了这点;
runfriends 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

你直接把ant的target(javac)设为SUN JDK中javac,在windows和linux平台上分别编译和运行、测试;
然后在部署web application前测试linuxs上的tomcat能正常启动;
最后把war包(或*.class)放入tomcat运行;

而上面的“实际是在linux编译的class文件不能再linux启动”:
你就copy到windows上去运……
[/Quote]
我想用jdt,不想用javac。我只想知道为什么吧ant编译器改成jdt还是不行
lxbccsu 2012-05-17
  • 打赏
  • 举报
回复
你直接把ant的target(javac)设为SUN JDK中javac,在windows和linux平台上分别编译和运行、测试;
然后在部署web application前测试linuxs上的tomcat能正常启动;
最后把war包(或*.class)放入tomcat运行;

而上面的“实际是在linux编译的class文件不能再linux启动”:
你就copy到windows上去运行测试。
cseu 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
最近遇到的稀奇事
windows下用eclipse编译的工程可在windows下用tomcat启动。
在linux下用svn检出后再用ant编译,不能用tomcat启动。
把在window下编译的class文件复制到linux,可在linux下用tomcat启动。

后来发现ant默认采用jdk自带编译器编译。eclipse有自己的编译器实现(jdt),而且不可替换。tomcat……
[/Quote]

不管是ant,eclipse,tomcat都是可以指定jdk,为了环境一致,你都指定同意版本的jdk好了。
lxbccsu 2012-05-16
  • 打赏
  • 举报
回复
编译器与JRE的版本要匹配,检查下linux下的JVM版本;
runfriends 2012-05-16
  • 打赏
  • 举报
回复
没有annotation,大版本号也是一样的,如果因为小版本号不一样引起这个问题,那应该是复制过去的class文件不能成功启动,而实际是在linux编译的class文件不能再linux启动。
大川101 2012-05-16
  • 打赏
  • 举报
回复
哈哈,用ant编译 教教我好不!对了,java不知一处编译处处可用吗?可以省略这个环节啊,直接拿编译好的用。至于为什么不行,两个地方的编译器版本不同造成的吧。
还有代码中如果有注解很有可能出现这样的问题!

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧