使用maven与来自第三方的DLL并管理DLL的名称

时间:2018-05-19 03:20:58

标签: java maven dll native

我有一个maven项目,并使用nativedependencies-maven-pluginhttps://github.com/fmarot/nativedependencies-maven)来管理DLL。

DLL来自第三方,具有以下结构。让我们说JAR文件的名称是abc.jar,相应的DLL是abcxyz.dll,其中xyz是没有句点的版本号。因此,如果版本是12.6.1,则DLL名为abc1261.dll。如果第三方将其产品更新为12.7.0版,则会发出新的JAR abc.jar和新的DLL abc1270.dll

我将JAR存储在本地存储库中,然后存储库中反映的JAR名称为abc-x.y.z.jar。我在名为natives-abc的DLL上放置了一个分类器,并且存储库中的DLL名称(一旦部署)为abc-x.y.z-natives-abc.dll。当我构建项目时,abc-x.y.z-natives-abc.dlltarget/natives正确地复制到nativedependencies-maven-plugin文件夹。

当我从Eclipse运行项目时,它失败了,因为JAR正在寻找abcxyz.dll而不是abc-x.y.z-natives-abc.dll。如果我将abc-x.y.z-natives-abc.dll复制到abcxyz.dll文件夹中的target/natives,那么一切正常,我知道java.library.path设置正确,我也通过检查使用jinfo工具进行处理。

我需要的是将DLL从本地存储库复制到target/natives后重命名。我无法弄清楚如何让maven这样做。

我想要做的是在本地存储库中使用不同版本的abc.jarabcxyz.dll,然后只需更改<version>文件中的pom.xml标记即可引用到不同的版本。部署中的JAR文件的名称并不相关,但它的相关DLL名称是相关的,因为来自第三方的特定版本的JAR文件会查找与该版本对应的特定DLL名称。 / p>

2 个答案:

答案 0 :(得分:1)

此处nativedependencies-maven-plugin的维护者。

我不确定我完全理解,但我认为我有一个解决方案: 如果您要在您的仓库(本地或非本地)部署/安装由您的3 rd 方提供的.jar(而不是.dll),那么当Maven将获得此依赖并解压缩时(与nativedependency-maven-plugin),它将保持其内部.dll的名称不变。因此,您的代码(或第三方代码)将在运行时正确找到它。

如果您自己的代码加载了DLL,我建议将DLL重命名为唯一的名称,而不使用该版本来简化该过程。希望它有所帮助。

答案 1 :(得分:0)

以上建议有效。我要做的是创建一个df.rolling(window='1d').corr() df.rolling(window=1).corr() 包含zip,(称之为abcxyz.dll),使用abcxyz.dll.zip打包将其添加到maven存储库,然后在zip指的是那个。

换句话说,这是具有依赖关系的pom.xml部分:

pom.xml

我刚刚使用WinZip创建了Zip。

<dependency>
    <groupId>com.thegroup</groupId>
    <artifactId>abc</artifactId>
    <version>12.6.1</version>
    <type>zip</type>
    <classifier>natives-abc</classifier>
</dependency>