当库为每个平台提供文件时,Java 应用程序跨平台的最佳方式是啥? [复制]

Posted

技术标签:

【中文标题】当库为每个平台提供文件时,Java 应用程序跨平台的最佳方式是啥? [复制]【英文标题】: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。但这个问题我的意思是如何包含每个库文件以运行每个平台。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于当库为每个平台提供文件时,Java 应用程序跨平台的最佳方式是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为什么说java是具有跨平台性

Java跨平台的基础

基础类库

使用从 OSGi 包中的库为 Kura 创建的现有插件项目

java程序可以跨平台运行的原因

c++11多线程入门<学习记录;