我有一个jar,它从一个巨大的XML文件创建一个过滤的XML文件。 现在这个jar在UNIX和Java SE 1.5.0.15中完美地运行,但是在Linux中,这个jar表现不同并且创建了错误的XML。
这可能是一个平台问题吗?
我是否需要为LINUX制作一个新的jar?
答案 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开发人员的一个笑话,“一次编写,随处调试”。