Maven - 如何删除阴影 .jar 的 module-info.class 警告?

Alb*_*ger 27 java uberjar maven maven-shade-plugin module-info

所以这是我的问题...

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

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

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

请帮忙 :(

roc*_*oco 29

正如评论中所引用的,过滤掉阴影插件中的文件对我来说似乎很好。

这是我的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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我还必须添加 `&lt;exclude&gt;META-INF/**&lt;/exclude&gt;` 才能完全消除项目中的所有警告。 (3认同)
  • @VapidLinus 只需要注意一件事:如果排除整个 META-INF 目录,则应用程序可能会停止工作,例如使用 SPI 服务接口。在这种情况下,您还应该包含“org.apache.maven.plugins.shade.resource.ServicesResourceTransformer”,以便在重新定位时重新定位包括服务在内的包。最好排除 META-INF/versions/**/*。 (2认同)