gpt4 book ai didi

java - 将 maven 与来自第三方的 DLL 结合使用并管理 DLL 的名称

转载 作者:行者123 更新时间:2023-12-02 11:13:55 25 4
gpt4 key购买 nike

我有一个 Maven 项目,正在使用 nativedependencies-maven-plugin ( https://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 存储在本地存储库中,存储库中反射(reflect)的 JAR 名称为 abc-x.y.z.jar 。我在 DLL 上放置了一个名为 natives-abc 的分类器,存储库中 DLL 的名称(部署后)为 abc-x.y.z-natives-abc.dll 。当我构建项目时,abc-x.y.z-natives-abc.dll然后正确复制到 target/natives文件夹 nativedependencies-maven-plugin .

当我从 Eclipse 运行该项目时,它失败了,因为 JAR 正在寻找 abcxyz.dll而不是abc-x.y.z-natives-abc.dll 。如果我复制abc-x.y.z-natives-abc.dll进入abcxyz.dlltarget/natives文件夹,然后一切正常,所以我知道 java.library.path设置正确,我也通过使用 jinfo 检查进程来验证这一点工具。

我需要的是 DLL 从本地存储库复制到 target/natives 后进行重命名。 。我不知道如何让 Maven 做到这一点。

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

最佳答案

这里是 nativedependencies-maven-plugin 的维护者。

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

如果您自己的代码加载 DLL,我建议将 DLL 重命名为唯一的名称,而不包含版本,以简化过程。希望对您有所帮助。

关于java - 将 maven 与来自第三方的 DLL 结合使用并管理 DLL 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com