【问题标题】:How can I remove module-info.class warning for a shaded .jar?如何删除阴影 .jar 的 module-info.class 警告?
【发布时间】:2019-09-27 12:49:54
【问题描述】:

我正在使用 maven-shade 插件将 Spring Boot 应用程序打包到一个 uber jar 中。很简单,对吧?好吧,除了最近我在mvn clean package 末尾收到以下警告:

[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.

这实际上并没有破坏任何东西,但我是一个完美主义者,这让我发疯。我该如何摆脱它?我尝试了很多事情都没有成功。

【问题讨论】:

  • 当您创建“Uber Jar”时会发生这种情况,您正在删除该 jar 中模块的使用。简单的回答是,作为开发人员的生活,你将需要失去那种完美主义的态度。然而,真正的问题是你为什么要创建 uber jar,你真的需要这样做吗?
  • 看到这个问题不是一个很好的答案,但它触及了要点stackoverflow.com/questions/51751981/…
  • 对多个 cmets 感到抱歉。阴影中有一个配置可以过滤掉文件,因此您可以预先执行此操作,如果在警告之前发生这种情况,您将不再看到它。在这里查看maven.apache.org/plugins/maven-shade-plugin/examples/…
  • 如果你正在做一个 spring boot 应用程序我不知道你为什么使用 maven-shade-plugin 没有意义。在 Spring Boot 应用程序中,您正在使用 spring-boot-maven-plugin ...它可以处理该问题....此外,将模块信息用于 Spring Boot 应用程序的应用程序没有任何意义...
  • 感谢大家的回复。我回家后会查看我的代码并通知您。我认为 khmarbaise 可能是对的,我的项目是最近转换为 Springboot 的 Dropwizard 项目,而 maven-shade 插件可能是该转换的后遗症......

标签: java maven maven-shade-plugin uberjar


【解决方案1】:

过滤掉阴影插件中的文件似乎对我来说很好。

这是我的 maven-shade-plugin 配置的样子:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>module-info.class</exclude>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

关键行是&lt;exclude&gt;module-info.class&lt;/exclude&gt;。过滤器在任何工件(*:* = 任何工件)中看到该文件时都会排除该文件。 (其他三个排除我用来摆脱依赖项中签名文件的错误)

我没有注意到这样做有任何不良副作用,警告现在消失了!

【讨论】:

  • 我还必须添加 &lt;exclude&gt;META-INF/**&lt;/exclude&gt; 才能完全消除项目中的所有警告。
  • 请注意,这需要插件的版本 >= 3.2.1。即使排除了该类,以前的版本也会打印警告。 issues.apache.org/jira/browse/MSHADE-303
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 2014-03-28
  • 2021-10-06
  • 1970-01-01
  • 2010-11-07
  • 2019-03-13
  • 2010-10-11
  • 2015-04-29
相关资源
最近更新 更多