【问题标题】:Best way for Java application cross platform when library have file for each platform? [duplicate]当库为每个平台提供文件时,Java 应用程序跨平台的最佳方式是什么? [复制]
【发布时间】:2014-08-10 21:04:40
【问题描述】:

我通常使用 chilkat 库 (http://www.chilkatsoft.com/java.asp) 仅使用 windows 开发。但是这个库每个平台都有每个库文件,今天我要跨平台做。

示例

  • Windows x64 使用 win64.dll
  • Windows x84 使用 win32.dll
  • Linux x64 使用 linux64.so
  • Linux x32 使用 linux32.so
  • Max OSX 使用 osx.jnilib

这是我在仅使用 windows 时包含 chilkat 库的源代码。

static {
    try {
        System.loadLibrary("lib/win64");
    } catch (UnsatisfiedLinkError e) {
        try {
            System.loadLibrary("lib/win32");
        } catch (UnsatisfiedLinkError e2) {
            System.err.println("Native code library failed to load.\n" + e2);
            System.exit(1);
        }
    }
}

现在我不知道。如何在跨平台的java应用程序中包含每个库文件?

请给我指路。

谢谢。

Edit1:很抱歉造成混淆。我知道如何在运行时找到 os.name。但这个问题我的意思是如何包含每个库文件以运行每个平台。

【问题讨论】:

    标签: java platform chilkat


    【解决方案1】:

    您可以使用os.name System 属性来确定您正在运行的操作系统...

     String os = System.getProperty("os.name");
     if (os.startsWith("Mac")) {
         // Running on Mac
     } else if (os.startsWith("Windows")) {
         // Running on Windows
     }
    

    抱歉,没有可供测试的 Linux 机器;)

    在 Windows 上,您可以尝试测试 PROCESSOR_ARCHITECTURE 环境变量,该变量在 x64 位进程状态下运行时应返回 AMD64

    【讨论】:

    • 很抱歉造成混淆。我知道如何在运行时找到 os.name。但这个问题我的意思是如何包含每个库文件以运行每个平台。
    • 全部包含,根据操作系统加载你需要的...
    • 你的意思是,我可以使用 "System.loadLibrary("lib/osx.jnilib");"在 Mac 上和 "System.loadLibrary("lib/linux64.so");"在 Linux 上什么时候知道操作系统名称正在运行?
    • 我愿意,但这就是我。您可以设置单独的“发行版”,其中仅包含所需的库,但我会让用于加载它们的代码相同
    【解决方案2】:

    您可以使用 JarSplice 并为许多平台创建多个 jar。 http://ninjacave.com/jarsplice

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多