我正在更新 Spigot (Minecraft) 插件,最新版本的 Spigot 需要 Java 16。在我的 pom 中,我将 maven 编译器插件目标更改为 16,源代码仍然是 1.8。现在我收到以下错误:
Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.2.4:shade (default) on project Plugin: Error creating shaded jar: Problem shading JAR C:\Users\Trent\workspace\Stocks\Plugin\target\Plugin-1.0-SNAPSHOT.jar entry com/tchristofferson/stocks/commands/StockbrokerCommand.class: java.lang.IllegalArgumentException: Unsupported class file major version 60
pom:
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>com.tchristofferson</groupId>
<artifactId>Stocks</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>API</module>
<module>Plugin</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>16</target>
<release>16</release>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
在使用 3.3.0-SNAPSHOT 之前我必须使用这个
<pluginRepositories>
<pluginRepository>
<id>maven-snapshots</id>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
</pluginRepository>
</pluginRepositories>
@wemu 是正确的,Maven Shade 插件尚不支持 Java 16。为了解决这个问题,我必须使用 Maven Shade 插件的快照版本 (3.3.0-SNAPSHOT),因为 3.2.4 不支持 Java还16个。
为了详细说明@tchristofferson 给出的答案,我通过在我的pluginRepository 中将快照设置为 true 来使其与 Java 16 一起使用:
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
如果您的
pom.xml
中没有上述内容,只需将其添加到 <project></project>
中的某个位置即可。
然后将maven-shade-plugin的版本更改为:
<version>3.3.0-SNAPSHOT</version>
就我而言,我的机器上安装了最新版本的 maven,并且代码适用于 java 11 版本。所以我使用了旧版本的maven并没有出现错误。
FWIW...
您还可以覆盖 ASM 的版本,以便与 maven-shade-plugin 3.2.x 一起使用,如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.2</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
<version>9.2</version>
</dependency>
</dependencies>
...
</plugin>