【问题标题】:Managing DLL dependencies with Maven使用 Maven 管理 DLL 依赖项
【发布时间】:2023-04-09 03:09:01
【问题描述】:

我有一个用 Maven 管理其依赖项的 Java 程序。其中一个依赖项是另一个程序的 JNI 包装器。 Maven 负责对相关 JAR 文件的引用,但我自己却在搞乱 DLL 文件。

是否有让 Maven 也处理 DLL 的好方法?理想情况下,我希望将 DLL 像 JAR 文件一样加载到我们的本地存储库中。

【问题讨论】:

    标签: java dll maven-2 java-native-interface


    【解决方案1】:

    你有没有尝试过这样的事情:

    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>footron</artifactId>
        <version>4.2</version>
        <scope>runtime</scope>
        <type>dll</type>
    </dependency>
    

    您可以使用以下方式将它们添加到 maven 的存储库中:

    mvn install:install-file -Dfile=footron.dll -DgroupId=com.foo -DartifactId=footron  -Dversion=4.2 -Dpackaging=dll -DgeneratePom=true 
    

    还没有为 DLL 做这个,但是这样的东西应该可以工作。

    【讨论】:

    • 实际上,在花了一些额外的时间思考之后,我认为值得投资于通过 JNI 消除对 DLL 的需求。从长远来看,可能值得付出努力。出于好奇,我会考虑您的建议。
    • @Kris,这可能是个好主意。我想过建议这样做,但我没有养成告诉人们修复我没见过的代码的习惯。又名,心理代码审查
    • @sal,那么让 maven 管理 .dll 文件会自动调用 System.loadLibrary() 吗?还是您仍然需要调用 System.loadLibrary()?我只是想知道如何确保加载 dll 以供其他对象使用。
    • 我怀疑它对你有什么要求。 dll 将在类路径上,但仅此而已。
    • 我不确定 -Dpackaging=dll 是如何工作的,但确实如此。当我尝试制作一个真正的 pom 并使用它时,它不起作用。
    【解决方案2】:

    我找到了另一个解决方案,在这个问题的答案中有描述:Using maven with DLL from third party and managing the name of the DLL

    基本上,如果您将 DLL 放入 ZIP 文件中,并将其作为单独的依赖项进行管理,并使用 nativedependencies-maven-plugin,则 DLL 将以正确的名称解压。

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 2013-05-20
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2011-09-11
      • 1970-01-01
      相关资源
      最近更新 更多