使用Maven管理DLL依赖关系

35
我有一个使用Maven管理依赖项的Java程序。其中一个依赖是另一个程序的JNI包装器。 Maven会处理与相关JAR文件的引用,但我必须自己处理DLL文件。
有没有一种好的方法让Maven也处理DLL文件呢?理想情况下,我希望像JAR文件一样将DLL加载到我们的本地存储库中。
2个回答

36

你尝试过像这样的方法吗:

<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
3
@Kris,那可能是个好主意。我也想建议,但我不习惯让人们修复我没见过的代码。也就是说,这是一种“心灵”代码审查。 - sal
1
@sal,使用Maven管理.dll文件是否会自动调用System.loadLibrary(<dll file>)?还是你仍然需要调用System.loadLibrary(<dll file>)?我只是想知道如何确保其他对象可以使用该dll。 - j will
我怀疑它不会为你调用任何东西。dll文件将在类路径上,但仅此而已。 - sal
我不确定 -Dpackaging=dll 如何工作,但它确实可以。然而,当我尝试创建一个真正的pom并使用它时,它却无法正常工作。 - ggb667

1
我找到了另一个解决方案,它在这个问题的答案中有描述:使用maven与第三方DLL并管理DLL的名称 基本上,如果你把DLL放进ZIP文件里,并将其作为独立依赖进行管理,并使用nativedependencies-maven-plugin,那么DLL将会以正确的名称被解压缩。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接