0

这个讨论涉及获得一种在不同操作系统中加载不同 jar 的方法。

案例场景

我正在开发一个称为 NSK 的特定操作系统。它是一种 unix 风格,为 HP NSK 服务器提供支持。我在 NSK 上运行我的一个中间件应用程序(一个 java 应用程序)。要求是使此应用程序脱离平台。即它也必须在其他平台上工作,如 LINUX 或 Windows。

为了实现这一点,我又引入了 1 个 jar。现在我需要介绍一个逻辑,JVM 必须在运行时加载适当的 jar(NSK 上的 jar1 和任何其他非 NSK 平台上的 jar2)。我使用以下逻辑来实现:

代码:

if (System.getProperty(os.name).equals("NSK"))
     load jar1
else 
     load jar2

上面的代码工作正常,直到我在上面使用的 getProperty API 中遇到安全异常“SecurityException”之一。这告诉运行应用程序的用户没有使用 getProperty() 的必要权限。所以,上面的逻辑在这里折腾。

有什么办法可以解决这个异常并且仍然​​能够找出操作系统的详细信息并加载正确的 jar?或者更好,有没有更好的逻辑来实现相同的?

有关 getProperty(..) 的更多详细信息,请参阅以下链接

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

提前致谢

问候, 帕比特拉

4

1 回答 1

0

鉴于 Java 是独立于平台的,并且只加载您使用的类,我将拥有一个 JAR,它包含您需要的一切,并且只加载适合您平台的类。

执行您的建议需要一个子类加载器,它只会增加似乎不需要的复杂性。

如果您无法访问系统属性,您可以主动测试您的库并查看哪个在您的系统上工作。我确信有一种方法或类在一种情况下有效,但在另一种情况下无效,否则您不需要两组代码。

于 2013-08-07T20:18:40.880 回答