我可以添加一个包含jar及其依赖jar的目录作为Maven依赖项吗?

时间:2020-02-18 15:04:03

标签: java maven osgi

我正在开发一个小的代码库(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向此类软件包添加“适当的”依赖关系,以便以后可以构建大型/超大型罐子?我知道一个罐子里有几种方法我可以使用mvn install:install-file ...将其安装到本地存储库中。但是,如何添加上述结构作为依赖项,以也将库包含在lib目录中(传递性依赖项)?我可以重新包装上面的结构以便更好地使用吗?

我是否需要将所有这些lib罐子单独添加到本地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: ...

2 个答案:

答案 0 :(得分:1)

Manifest告诉您该库的jar包含依赖项。如果将此库jar安装到OSGi中,它应该可以工作,因为它已嵌入所有依赖项。

如果您打算在OSGi之外使用此库,则这种带有嵌入式库的打包是没有意义的。也许他们也只提供了库,您可以通过maven安装依赖项(如果它们是众所周知的开源库)。

答案 1 :(得分:0)

如@Christian Schneider所述,直接从公共Maven存储库中安装清单文件中提到的所有依赖项。那些不可用的文件可以手动安装到项目范围内的项目本地Maven存储库中。为此,请在父Reporter.setCurrentTestResult(result);文件中定义项目内Maven存储库:

pom.xml

然后安装库<repositories> <repository> <id>in-project</id> <name>In Project Repo</name> <url>file://${project.basedir}/lib</url> </repository> </repositories> 和清单中列出的对项目内资源库不公开的依赖项:

some.library.jar

这将在本地Maven存储库(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生成校验和。