簡體   English   中英

我可以添加一個包含 jar 及其依賴 jar 的目錄作為 maven 依賴嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM