1

在我们的项目中,我们创建了一个“skinny” jar,它只包含我们自己的应用程序代码,我们使用 maven shade 插件为我们运行应用程序所需的依赖项创建 JAR。Maven shade 用于将多个依赖项打包到同一个 jar 中。例如,所有的 jetty 依赖都打包成一个更大的jetty-full.jar.
现在我们面临一个org.graalvm.js依赖问题。它取决于truffle-api哪个本身是一个多版本 jar,并且包含用于 java 11 下的类META-INF/versions/11。当我们使用 Java 11 时,我们需要这些类,但由于某种原因,它们被 maven shade 插件排除在外。
这是相关的代码pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>project-dependencies</artifactId>
    <groupId>org.example</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>graal-full</artifactId>

  <properties>
    <graalvm.version>21.3.0</graalvm.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js</artifactId>
      <version>${graalvm.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js-scriptengine</artifactId>
      <version>${graalvm.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <configuration>
          <transformers>
            <transformer
                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
          </transformers>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

生成的META-INFjar 仅包含以下文件夹和文件:

  • 升级
  • 服务
  • 本机图像
  • 行家
  • MANIFEST.MF(文件)

versions文件夹丢失。
我现在使用copy-dependency插件来复制单个文件,并在那里META-INF包含versions/11所需的 Java 11 类的文件夹。
我是否遗漏了什么或者为什么被META-INF/versions排除在阴影罐中?

4

0 回答 0