![](/img/trans.png)
[英]Maven: add a dependency to a jar by relative path outside the project directory
[英]Can I add a directory containing a jar and its dependant jars as a maven dependency?
我正在開發一個小型代碼庫(maven 項目),它需要由我的項目集成的系統的創建者提供的庫。 現在該庫采用以下形式:
com.example.library.client_1.2.3.v20190123/ (just a directory)
├── lib/
│ ├── some-dependency-3.2.1.jar
│ ├── ....jar
│ └── another-dependency-1.2.3.jar
├── META-INF/
│ └── MANIFEST.MF
└── some.library.jar
這個圖書館是怎么建的?
如何使用 maven 向這樣的包添加“適當的”依賴項,以便我以后可以構建一個大/超級 jar? 我知道使用單個 jar 有幾種方法,例如我可以使用mvn install:install-file ...
將它安裝到我的本地存儲庫。 但是如何將上述結構作為依賴項添加到lib
目錄中的庫(傳遞依賴項)? 我可以重新打包上述結構以更好地使用嗎?
我是否需要將所有這些lib
jar 單獨添加到我的本地 Maven 存儲庫中?
如果感興趣,清單具有以下形式:
Manifest-Version: 1.0
Bundle-SymbolicName: com.example.library....;singleton:=true
Export-Package: com.example.library...
Bundle-Name: ...
Bundle-Version: 1.2.3.v20190123
Bundle-ClassPath: lib/some-dependency-3.2.1.jar,lib/...
.jar,lib/another-dependency-1.2.3.jar
Bundle-ManifestVersion: 2
Bundle-ActivationPolicy: lazy
Bundle-Vendor: ...
Manifest 告訴你這個庫的 jar 包含依賴項。 如果您將此庫 jar 安裝到 OSGi 中,它應該可以工作,因為它嵌入了所有依賴項。
如果您打算在 OSGi 之外使用這個庫,那么這種帶有嵌入式庫的打包是沒有意義的。 也許他們也只提供庫,您可以通過 maven 安裝依賴項(如果它們是眾所周知的開源庫)。
如@Christian Schneider 所述,安裝清單文件中提到的所有依賴項,這些依賴項可以直接從公共 Maven 存儲庫中獲得。 那些不可用的可以手動安裝到項目范圍內的項目本地 maven 存儲庫。 為此,請在您的父pom.xml
文件中定義項目內 maven 存儲庫:
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
然后安裝庫some.library.jar
和清單中列出的未對項目內存儲庫公開可用的依賴項:
mvn install:install-file \
-Dfile=path/to/some-library-1.2.3.jar \
-DgroupId=com.example \
-DartifactId=some-library \
-Dversion=1.2.3 \
-Dpackaging=jar \
-DlocalRepositoryPath=lib \
-DcreateChecksum=true
然后這將在您的本地 maven 存儲庫 ( lib
) 中生成結構,並為 maven 生成校驗和。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.