【问题标题】:Apache Felix Maven Bundle Plugin avoid inlining of dependenciesApache Felix Maven Bundle Plugin 避免内联依赖项
【发布时间】:2016-02-04 08:41:20
【问题描述】:

如何实现插件不内联新构建 jar 文件中的依赖项?

<build>
  <plugins>
   <plugin>
     <groupId>org.apache.felix</groupId>
     <artifactId>maven-bundle-plugin</artifactId>
     <extensions>true</extensions>
     <configuration>
       <instructions>
         <Bundle-Category>tools</Bundle-Category>
         <Fragment-Host>org.jsmpp.jsmpp</Fragment-Host>
         <Private-Package>!</Private-Package>
         <Export-Package>
           org.jsmpp.*;version="2.2.3"
         </Export-Package>
         <Import-Package>!org.slf4j</Import-Package>
         <Bundle-Version>2.2.3</Bundle-Version>
       </instructions>
     </configuration>
   </plugin>
  </plugins>
</build>
<dependencies>
  <dependency>
    <groupId>org.jsmpp</groupId>
    <artifactId>jsmpp</artifactId>
  </dependency>
</dependencies>

【问题讨论】:

  • 你的 pom.xml 是否有 ..... 这基本上会将所有依赖项包含或内联到你的包中,你可以发布你的 pom.xml
  • 我相应地更新了问题
  • 内联哪些包?您可以尝试删除 Private-Package 和 Import-Package 标签吗?
  • 它确实内联了 org.jsmpp:jsmpp 包

标签: osgi apache-felix


【解决方案1】:

插件不会内联任何依赖项,除非您包含Embed-Dependency 指令。该指令可以从父 POM 继承。

【讨论】:

  • 我认为这是正确的,我不会对此进行任何更改,因为它只是一种解决方法。我现在提供了一个最终的清单,它被打包在 jar 中。
【解决方案2】:

指令匹配的所有包都包含在包中,即使这些包来自依赖项。因此,您可以明确指定捆绑包中的所有包,也可以使用通配符并使用“!”排除不需要的包前缀,例如

<Export-Package>
    org.jsmpp.*;version="2.2.3",
    !org.jsmpp.donotwant
</Export-Package>

maven-bundle-plugin documentation

【讨论】:

    【解决方案3】:

    使用_exportcontents 而不是Export-Package

    _exportcontents 仅影响清单,而 Export-Package 会修改清单和捆绑包的内容。

    见:http://www.aqute.biz/Bnd/Format

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 2020-06-14
      • 1970-01-01
      • 2012-04-20
      • 2015-10-05
      • 2019-12-15
      • 2012-05-07
      • 2016-12-11
      • 2011-02-05
      相关资源
      最近更新 更多