在JAR中嵌入依赖项,maven bundle插件不起作用

在JAR中嵌入依赖项,maven bundle插件不起作用,jar,osgi,osgi-bundle,flying-saucer,maven-bundle-plugin,Jar,Osgi,Osgi Bundle,Flying Saucer,Maven Bundle Plugin,我成功地将特定于OSGi的元数据添加到飞碟pdf Maven工件的清单中。但是,我没有成功地将该工件的依赖项和可传递依赖项嵌入到创建的JAR文件中 我使用了从GitHub[1]获取的飞碟pdf原始源代码,并在pom.xml文件中添加了以下语句: <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive>

我成功地将特定于OSGi的元数据添加到飞碟pdf Maven工件的清单中。但是,我没有成功地将该工件的依赖项和可传递依赖项嵌入到创建的JAR文件中

我使用了从GitHub[1]获取的飞碟pdf原始源代码,并在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>
        <configuration>
          <instructions>
            <Embed-Dependency>itext</Embed-Dependency>
            <Embed-Transitive>true</Embed-Transitive>
          </instructions>
        </configuration>
      </execution>
    </executions>
  </plugin>
但是itext库没有放入结果JAR中,即清单的Bundle类路径条目指向缺少的内容

此外,我还尝试创建一个全新的工件,它声明了对原始飞碟pdf工件的依赖关系,并将其重新打包为OSGi捆绑包,在StackOverflow上给出了这个答案[2],这很有效

我能看到的唯一真正的区别是包装类型“bundle”和“jar”。但我不能在最初的飞碟pdf工件中更改该包装类型,因为所有东西都需要保持非OSGi使用的原样,以便将该更改作为推送请求接受

你们知道maven bundle插件的嵌入依赖项是否可以在打包类型“jar”下工作吗?或者它是否需要包装类型“bundle”

我很感激任何关于我可以尝试在原始工件中直接完成重新绑定的响应和提示

多谢各位

问候
Timo Rohrberg

使用maven bundle插件有两种方法

第一种方法是使用

<extensions>true</extensions> and <packaging>bundle</packaging>
true和bundle
在这种情况下,maven bundle插件负责所有构建步骤,并可以影响jar文件内容

第二种方法是使用清单目标并在jar插件中添加清单。在这种情况下,maven bundle插件只能影响jar。它不能嵌入任何其他库或复制外部私有类

因此,如果你需要嵌入,那么唯一的方法就是改变包装

所以我认为有两种解决方案不会对原来的罐子造成太大的影响

  • 不要将依赖项作为捆绑包嵌入和安装
  • 在构建中创建一个sperate模块,以创建一个bundle,该bundle随后可用于原始jar
  • <extensions>true</extensions> and <packaging>bundle</packaging>