[英]Using maven with DLL from third party and managing the name of the DLL
我有一個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存儲在本地存儲庫中,然后反映在存儲庫中的JAR名稱為abc-xyzjar
。 我在名為natives-abc
的DLL上放置了一個分類器,並且存儲庫中的DLL名稱(一旦部署)為abc-xyz-natives-abc.dll
。 當我構建項目時, abc-xyz-natives-abc.dll
然后由nativedependencies-maven-plugin
正確復制到target/natives
文件夾中。
當我從Eclipse運行項目時,它失敗了,因為JAR正在尋找abcxyz.dll
而不是abc-xyz-natives-abc.dll
。 如果我將abc-xyz-natives-abc.dll
復制到target/natives
文件夾中的abcxyz.dll
,則一切正常,因此我知道java.library.path
的設置正確,並且通過檢查使用jinfo
工具進行處理。
我需要的是將DLL從本地存儲庫復制到target/natives
重命名。 我不知道如何使Maven做到這一點。
我想做的是在本地存儲庫中擁有不同版本的abc.jar
和abcxyz.dll
,然后只需更改pom.xml
文件中的<version>
標記即可引用不同的版本。 部署中的JAR文件的名稱無關緊要,但它與DLL的名稱相關,因為第三方針對特定版本的JAR文件會查找與該版本相對應的特定DLL名稱。
這里是nativedependencies-maven-plugin
維護者。
我不知道我完全理解,但我想我有一個解決辦法:如果你部署/安裝在你回購(本地或不)通過你的第三方提供的.jar(不是.dll文件),然后當Maven將獲得此依賴關系並將其解壓縮(使用nativedependency-maven-plugin
),它將保持其內部.dll
的名稱不變。 因此,您的代碼(或第三方代碼)將在運行時正確找到它。
如果您自己的代碼加載了DLL,則建議您將DLL重命名為唯一的名稱,而不使用該版本,以簡化過程。 希望能幫助到你。
以上建議行之有效。 我要做的是創建一個包含abcxyz.dll
的zip
(稱為abcxyz.dll.zip
),使用zip
打包將其添加到maven存儲庫,然后在pom.xml
引用該依賴項。
換句話說,這是pom.xml
中具有依賴項的部分:
<dependency>
<groupId>com.thegroup</groupId>
<artifactId>abc</artifactId>
<version>12.6.1</version>
<type>zip</type>
<classifier>natives-abc</classifier>
</dependency>
我只是使用WinZip創建了Zip。
mvn deploy:deploy-file -Durl=file:///path-to-my-repo -Dfile=abc1261.dll.zip -DgroupId=com.thegroup -DartifactId=abc -Dpackaging=zip -Dversion=12.6.1 -Dclassifier=natives-abc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.