[英]Adding a JNI library to the local Maven Repository
我希望使用 Maven 添加一個 JNI 庫,包括它的共享 object (.so) 文件到我的項目中。不幸的是,它還沒有在公共存儲庫中,所以我想我必須自己將它安裝在我的本地存儲庫中才能讓它工作。
我 go 如何將 Maven 中的本機部分包含在我的項目中(並最終使用復制依賴項插件導出)。 這是一個標准的 J2SE 應用程序(不是網絡應用程序),帶有 packaging.jar?
我要添加的庫是junixsocket ,以防萬一它有助於了解。 它有一個 .so(本機庫)組件和 Java.jar 組件。
我遇到了maven-nar-plugin ,它似乎以本機構建為目標,但似乎更傾向於從代碼構建 JNI 項目,而不是捆綁第 3 方 JNI 庫,而且我無法將拼圖拼湊在一起.
我如何 go 關於:
謝謝。
我的方法:
將.so
文件放入具有平台特定分類器的存儲庫,如下所示: sqlite3-3.7.9-linux-x86_64.so
。 為所有需要的平台添加.so
依賴項:
<dependency>
<groupId>de.ch-werner</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.7.9</version>
<type>so</type>
<classifier>linux-x86_64</classifier>
</dependency>
使用此 maven 程序集插件配置將所有本機庫放入您的 dist 的lib/native
目錄中:
<dependencySet>
<outputDirectory>lib/native</outputDirectory>
<outputFileNameMapping>${artifact.artifactId}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
<useStrictFiltering>false</useStrictFiltering>
<includes>
<include>*:*:dll:*</include>
<include>*:*:so:*</include>
<include>*:*:jnilib:*</include>
</includes>
</dependencySet>
使用這個 class在應用程序啟動時加載庫(計划將分類器命名更改為GNU 三元組):
CtzJniUtils.loadJniLibsFromStandardPath(Launcher.class, "sqlite3")
在加載它之前,我在 jar 中包含了 .so 和額外的平台特定共享庫。 通過這種方式,它的部署方式與任何其他 jar 一樣。
完成此操作的項目示例,針對不同平台使用 multiple.so 是https://github.com/peter-lawrey/Java-Thread-Affinity
作為在運行時解壓庫的替代方法,您可以將它們存儲為 jars 中的 Maven 但在構建時解壓它們: http://www.buildanddeploy.com/node/17 。
maven-nativedependencies-plugin插件會自動為你做這件事,只要你遵循他們的命名約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.