unix和linux中的jar表现不一样吗?

时间:2013-09-03 07:16:13

标签: java linux unix executable-jar

我有一个jar,它从一个巨大的XML文件创建一个过滤的XML文件。 现在这个jar在UNIX和Java SE 1.5.0.15中完美地运行,但是在Linux中,这个jar表现不同并且创建了错误的XML。

这可能是一个平台问题吗?

我是否需要为LINUX制作一个新的jar?

3 个答案:

答案 0 :(得分:3)

Linux是Unix的一个版本。你的意思是Solaris吗?

我建议您使用最新版本的Java,如果必须,请使用最新版本的Java 5.0。我还会尝试使用Java 6 update 45或Java 7 update 25来查看这是否是一个已修复的错误。

答案 1 :(得分:0)

  

这可能是一个平台问题吗?

潜在。或者它可能是您正在运行的应用程序中的错误。

  

我是否需要为LINUX制作一个新的jar?

我怀疑这会有什么不同。如果问题是“平台问题”,则可能是应用程序(在JAR中)和运行时库(在执行平台中)之间存在某些不兼容性。重建JAR不太可能改变这一点。


然而,这完全是猜测。没有更多细节(即应用程序正在做什么,以及它是如何“表现不同”),不可能知道发生了什么,这是一个平台问题(或者只是一个应用程序错误),以及你可以做些什么解决它。

答案 2 :(得分:0)

  

这可能是一个平台问题吗?

只是一个疯狂的猜测...在java中,默认的charset是依赖于平台的。默认字符集取决于底层操作系统的区域设置。将XML String转换为字节并将它们写入文件时,您可以获得不同的结果,具体取决于默认的字符集。

byte [] xmlFileBytes = xmlString.getBytes()//取决于默认字符集

要在两个平台上的代码中查看JVM默认字符集调用Charset.defaultCharset()以进行比较。也许在UNIX上有所不同? 另一种确定默认字符集的方法是使用命令行实用程序:
$ jinfo <processId> | grep file\.encoding
要查看操作系统区域设置,请使用命令: $ locale

XML文件应以UTF-8字符集编码。 您可以使用UTF-8覆盖代码中的默认字符集:xmlString.getBytes("UTF-8")
或者,您可以在JVM启动时通过提供 file.encoding 系统属性来覆盖它:
$ java -Dfile.encoding=UTF-8 -jar your-jar-file.jar


  

我是否需要为LINUX制作一个新的jar?

可能不是,Java口头禅应该是"Write once, run anywhere"

然而:

  

问题在于,由于有多个JVM实现,在各种不同的操作系统(如Windows,Linux,Solaris,NetWare,HP-UX和Mac OS)之上,可能存在细微差别。程序可以在每个JVM / OS组合上执行,这可能需要在各种目标平台上测试应用程序。这引起了Java开发人员的一个笑话,“一次编写,随处调试”