当前位置: 首页 > 知识库问答 >
问题:

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

哈栋
2023-03-14

在使用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上找到一篇帖子后,我手动删除了一些似乎来自bouncy文件的META-INF/file。然后我重新创建了jar文件,它成功了。有没有一种方法可以使用felix插件自动做到这一点?

谢谢

共有1个答案

鲁宏爽
2023-03-14

看起来shade插件让这变得很容易。所以我转而使用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

 类似资料:
  • 用chatgpt问了不下十次 给了各种插件的方案 不知道为啥就是不生效 下面是我的pom.xml中的部分片断

  • 我正在获取此错误堆栈跟踪 我可以简单地在我的Proguard配置上使用选项来使其工作(没有签名验证错误)。但是,由于这个JAR的大小相当大(4MB),所以我想实际针对这个特定的bcprov-jdk15on.JAR使用它 是否有方法使用maven-assembly-plugin来依赖项jar? 谢谢你。

  • 我有一个相当简单的要求。我有以下项目布局: 我想做的是为中的所有java文件创建一个jar 使用from: 直接执行“排除”: 这些都是我在网上找到的建议--但似乎没有一个奏效。我做错了什么。 分级版本是2.12。

  • 我正在使用 Maven 来构建一个 Java 项目,我有几个文件,和,我想将它们复制到 JAR 文件内的 目录中。 到目前为止,我的工作如下: 但这也会在编译时将这两个文件复制到 目录中。 所以我希望这些文件包含在JAR文件中,而不是其他地方。有办法做到这一点吗?

  • 问题内容: 我在做一些真正愚蠢的事情时遇到了一个大问题。也就是说,打开流到我的META-INF文件夹中的资源文件。我正在使用jar工具并执行以下操作: 我只是一个空!该项目是使用maven构建的,xsd文件最终位于META-INF文件夹中,但仍然无法使用。 我不理解的是背后的理论?ClassLoader如何在文件系统中执行查找?如何获得文件? 问题答案: 尝试删除第一个斜杠: 如果要在对象上调用方

  • 如何才能缓解这种情况?