如何在清单文件中包含 Maven 依赖项

Posted

技术标签:

【中文标题】如何在清单文件中包含 Maven 依赖项【英文标题】:How to include Maven dependencies in Manifest file 【发布时间】:2016-12-02 19:03:17 【问题描述】:

我正在为 OSGI 应用程序开发一个插件,使用 maven 进行编译。为了安装插件,OSGI 应用程序应该读取有关插件依赖项的信息。此信息应在 MANIFEST.MF 文件中提供。我想知道的是如何使用 Virgo Tooling 生成正确的 MANIFEST.MF 文件。

这些是我想包含在 MANIFEST.MF 中的依赖项

更新根据答案我使用了 Apache Felix

在我添加的 pom.xml 中

<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>  
      <manifestFile>$project.build.outputDirectory/META-INF/MANIFEST.MF</manifestFile>
    </archive> 
  </configuration>
</plugin>  
<plugin>   
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <executions>
    <execution>
      <id>bundle-manifest</id>
      <phase>process-classes</phase>
      <goals>    
        <goal>manifest</goal>
      </goals>   
    </execution>
  </executions>
</plugin>

下载 maven-bundle.jar 并执行命令mvn org.apache.felix:maven-bundle-plugin:manifest 生成带有清单的 .jar 文件,但清单仅包含以下信息

Manifest-Version: 1.0
Implementation-Vendor: The Apache Software Foundation
Implementation-Title: Maven Bundle Plugin
Implementation-Version: 3.2.0
Implementation-Vendor-Id: org.apache.felix
Built-By: cziegeler
Build-Jdk: 1.7.0_80
Specification-Vendor: The Apache Software Foundation
Specification-Title: Maven Bundle Plugin
Created-By: Apache Maven 3.3.9
Specification-Version: 3.2.0
Archiver-Version: Plexus Archiver

任何想法我做错了什么?

【问题讨论】:

【参考方案1】:

就个人而言,我会使用Apache Felix Maven Bundle Plugin 生成 MANIFEST.MF 文件

尝试在项目的 pom.xml 文件中为插件添加一些配置。

这是一个开始,但您应该阅读文档并找到适合您确切需求的正确说明。如果您能提供一个 MANIFEST.MF 文件的示例,将会很有帮助。

<plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>3.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
                </instructions>
            </configuration>
            <executions>
                <execution>
                    <id>generate-manifest</id>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                    <phase>generate-resources</phase>
                </execution>
            </executions>
        </plugin>

使用这种配置,MANIFEST.MF 将在“生成资源”阶段生成。

【讨论】:

能否请您添加有关您提供的解决方案的更多详细信息? 在这里查看“清单”目标:felix.apache.org/documentation/subprojects/…

以上是关于如何在清单文件中包含 Maven 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Maven - 在 jar 中包含依赖库而不解包依赖项?

如何在使用 maven 构建的战争中包含系统依赖项

是否可以创建一个包含项目类和项目依赖项的“uber”jar 作为带有自定义清单文件的 jar?

Flutter:我们检测到您的应用在您的 1 个或多个 app bundle 或 APK 的清单文件中包含 requestLegacyExternalStorage 标志

如何使用 bnd/maven-bundle-plugin 从 jar 依赖项将资源文件包含到 osgi 包中?

如何在 maven jar 构建过程中包含外部 jar?