如何为不同的平台创建 Maven 工件,即需要系统库

How to create maven artifact for different platforms, i.e. needs system libraries

我有一个 JAR 文件,我想将其作为工件添加到我的 Maven 2 存储库中。 JAR 依赖于每个平台特定的系统库,例如.dll 在 Windows、.so 在 Linux 等

我应该如何创建工件以便来自不同平台的用户可以使用 JAR?

如果您的 JAR 是一个 library,您希望将其包含到其他项目中,那么您可以创建可以基于系统激活的 maven 配置文件,并且在那里添加任何所需的系统依赖项。

<profiles>
  <profile>
    <activation>
      <os>
        <name>Windows XP</name>
        <family>Windows</family>
        <arch>x86</arch>
        <version>5.1.2600</version>
      </os>
    </activation>
    ...
  </profile>
</profiles>

但是,如果您正在制作 executable JAR,那就完全不同了。

有很多方法可以做到这一点,但并非所有方法都很容易。如果你知道你在寻找什么(DLLSO 库的名称),那么你可以制作一个启动脚本来:

  1. 尝试在 class 路径中找到一个
  2. 尝试在系统路径中找到一个
  3. 尝试在 "default" / "most expected" 个位置找到一个
  4. 搜索具有文件位置
  5. .config文件
  6. 要求用户输入文件路径

有些应用会执行所有这些步骤,有些会执行几个或仅执行一个。我也想知道有没有更好的方法:)