繁体   English   中英

使用 Maven Shade 构建应用程序 jar 时,排除所有 META-INF/versions 目录/文件是否安全?

[英]When building an application jar with Maven Shade, is it safe to exclude all META-INF/versions directories/files?

我相信版本文件夹在那里支持多个 Java 版本。 我们总是为一个非常具体的版本(此时是 11)构建。 在创建我们的单个应用程序 jar 时排除这些目录/文件是否存在危险? 前任。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<configuration>
    <transformers>
        <transformer
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>${start-class}</mainClass>
            <manifestEntries>
                <Class-Path>./</Class-Path>
                <Implementation-Version>${ourSoftware.revision}</Implementation-Version>
            </manifestEntries>
        </transformer>
    </transformers>
    <filters>
        <filter>
            <artifact>*:*</artifact>

            <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>

                <exclude>META-INF/versions/**</exclude> <!-- IS THIS SAFE? -->
            </excludes>
        </filter>
    </filters>
    <finalName>${project.artifactId}App</finalName>
</configuration>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
    </execution>
</executions>

谢谢!

是的,这些版本文件夹用于支持 Multi-Release Jar 文件(参见JEPS 238 )。

如果您在MANIFEST.MF文件中将multi-release属性明确设置为false ,这对我来说似乎是安全的。

下面是它的工作原理:

在不支持 MRJARs 的 JDK 中,只有根目录下的类和资源是可见的,两种包装是无法区分的。 在支持 MRJAR 的 JDK 中,与任何更高版本的 Java 平台版本对应的目录将被忽略; 它将首先在与当前运行的主要 Java 平台发布版本相对应的 Java 平台特定目录中搜索类和资源,然后搜索较低版本,最后搜索 JAR 根目录。 在 Java 9 JDK 上,就好像有一个特定于 JAR 的 class 路径首先包含版本 9 文件,然后是 JAR 根目录; 在 Java 8 JDK 上,这个 class 路径将只包含 JAR 根目录。 (参考: JEPS 238

这种基于版本的打包机制会选择性地忽略不相关的版本文件夹,即使里面有内容。 禁用该机制应该解决为忽略所有版本文件夹(如果它们存在)并且如果它们不存在则完全回退到 JEPS 238 之前存在的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM