首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将maven-bundle-plugin与maven-shade-plugin一起使用

将maven-bundle-plugin与maven-shade-plugin一起使用
EN

Stack Overflow用户
提问于 2013-08-17 03:19:01
回答 4查看 4.8K关注 0票数 15

在构建的包阶段,我使用maven-shade-plugin重新定位一些包。我还使用maven-bundle-plugin来生成一个清单。问题是捆绑包插件在shade插件之前运行(在process-classes阶段),并且在生成的清单的导出中不包括我的任何shaded包。

我怎样才能让这两个插件很好地相互配合,这样我重新定位的包就会被捆绑包插件像对待其他包一样对待?

--

应要求,我的POM的Shade和bundle部分:

代码语言:javascript
复制
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <filters>
        <filter>
          <artifact>cglib:cglib</artifact>
          <includes>
            <include>net/sf/cglib/core/**</include>
            <include>net/sf/cglib/proxy/**</include>
          </includes>
        </filter>
      </filters>
      <relocations>
        <relocation>
          <pattern>net.sf.cglib</pattern>
          <shadedPattern>org.modelmapper.internal.cglib</shadedPattern>
        </relocation>
        <relocation>
          <pattern>org.objectweb.asm</pattern>
          <shadedPattern>org.modelmapper.internal.asm</shadedPattern>
        </relocation>
      </relocations>
    </configuration>
  </plugin>

  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
    <executions>
      <execution>
        <id>bundle-manifest</id>
        <phase>process-classes</phase>
        <goals>
          <goal>manifest</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <instructions>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
        <Export-Package>
          org.modelmapper,
          org.modelmapper.builder,
          org.modelmapper.config,
          org.modelmapper.convention,
          org.modelmapper.spi
        </Export-Package>
        <Private-Package>
          org.modelmapper.internal.**
        </Private-Package>
        <Import-Package>
          *
        </Import-Package>
        <Include-Resource>
          {maven-resources},
          {maven-dependencies}
        </Include-Resource>
      </instructions>
    </configuration>
  </plugin>

Taken from here

EN

回答 4

Stack Overflow用户

发布于 2013-08-31 01:54:27

另一个选择是完全丢弃maven捆绑包插件,并使用Maven Shade插件ManifestResourceTransformer将所需的OSGI元数据添加到清单中。

xbean-asm-shaded/pom.xml为例。

代码语言:javascript
复制
<transformers>
  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <manifestEntries>
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
      <Export-Package>
        org.apache.xbean.asm;org.modelmapper.builder; ...
      </Export-Package>
      <Import-Package>*</Import-Package>
      <Private-Package>org.modelmapper.internal ...</Private-Package>
   </manifestEntries>
</transformer>
票数 7
EN

Stack Overflow用户

发布于 2013-09-04 05:00:25

解决方案非常简单。你仍然可以同时使用maven-bundle-plugin和maven-shade-plugin。你只需要记住顺序就行了。如果你使用捆绑包打包,maven捆绑包插件将在maven-shade之前的包阶段被执行。但这并不是错的。

事情是这样的。

使用私有软件包: pkg.name.before.shading

  • Make maven- shade -
  • with one null:null -这将阻止shade插件创建空的jar
  • 使用maven-shade-plugin重定位-从pkg.name.before.shading到other.pkg。

您可能会在FasterXML jackson-module-paranamer中看到此技巧

票数 2
EN

Stack Overflow用户

发布于 2013-08-29 03:55:35

我假设在compile阶段完成之后,您想要:

  1. 使用shade插件重新定位某些类
  2. 使用捆绑包插件创建清单
  3. 使用jar插件

将其打包

问题是捆绑包插件在shade插件之前运行

捆绑包插件被绑定到process-classes阶段,该阶段来自shade插件绑定到的package阶段。

我建议您也将shade插件绑定到process-classes阶段。更改shade插件配置,如下所示:

代码语言:javascript
复制
<phase>process-classes</phase>

由于着色器插件定义在pom文件中位于捆绑包插件定义之前,因此在process-classes阶段中,着色器插件将在捆绑包插件之前运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18280608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档