0

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

这可能是平台问题吗?

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

4

3 回答 3

3

Linux 是 Unix 的一个版本。你是说索拉里斯吗?

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

于 2013-09-03T07:38:56.243 回答
0

这可能是平台问题吗?

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

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

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


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

于 2013-09-03T07:56:38.210 回答
0

这可能是平台问题吗?

只是一个疯狂的猜测......在java中,默认字符集是平台相关的。默认字符集取决于底层操作系统的语言环境。将 XML 字符串转换为字节并将它们写入文件时,您可以获得不同的结果,具体取决于默认字符集。

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

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

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


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

可能不是,Java 的口头禅应该是“一次编写,随处运行”

然而:

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


于 2013-09-03T09:48:37.237 回答