如何从bundle中排除META-INF文件?

时间:2015-02-03 06:42:15

标签: java maven apache-felix

如何在使用maven apache felix插件构建捆绑jar时排除一些META-INF文件?

这是我的felix配置

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.4.0</version>
    <extensions>true</extensions>
    <configuration>          
      <instructions>
       <!-- Embed all dependencies -->
       <Embed-Transitive>true</Embed-Transitive> 
       <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
     </instructions>
   </configuration>
 </plugin>

我引入所有传递依赖项并嵌入它们,因为我想创建一个可以添加到类路径中的jar。

当我尝试运行我的jar时虽然我得到了异常

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

根据我在SO上发现的帖子,我手动删除了一些似乎来自弹性文件的META-INF /文件。然后,我重新创建了我的jar文件,它工作正常。有没有办法使用felix插件自动执行此操作?

由于

1 个答案:

答案 0 :(得分:0)

看起来像阴影插件让这很容易。所以我改用了使用shade插件而不是使用felix插件。这是我的pom插件配置:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <filters>
            <filter>
              <artifact>*:*</artifact>
              <!-- We need to exclude the signatures for any signed jars otherwise
                   we get an exception. -->
              <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
              </excludes>
            </filter>
          </filters>
        </configuration>
      </execution>
    </executions>
  </plugin>

请参阅http://goo.gl/dbwiiJ