[英]Gradle Java compilation error using pattern matching instanceof & switch expressions
編譯 Gradle Java 項目時出現以下錯誤:
> Task :compileJava FAILED
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\CommandsManager.java:52: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\CommandsManager.java:52: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\CommandsManager.java:52: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\CommandsManager.java:56: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:38: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:38: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:38: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:54: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:66: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:66: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:66: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:72: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:81: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:81: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:81: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:84: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:93: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:93: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:93: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:96: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:107: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:107: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:107: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:110: error: ')' expected
if (recipe instanceof FurnaceBuilder furnace) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:110: error: not a statement
if (recipe instanceof FurnaceBuilder furnace) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:110: error: ';' expected
if (recipe instanceof FurnaceBuilder furnace) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:115: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:125: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:125: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:125: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RecipesCommand.java:133: error: 'else' without 'if'
} else
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:23: error: : expected
case "ITEMS" -> reloadItems(sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:23: error: illegal start of expression
case "ITEMS" -> reloadItems(sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:23: error: ';' expected
case "ITEMS" -> reloadItems(sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:23: error: not a statement
case "ITEMS" -> reloadItems(sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:23: error: ';' expected
case "ITEMS" -> reloadItems(sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: : expected
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: illegal start of expression
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: ';' expected
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: ';' expected
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: not a statement
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:24: error: ';' expected
case "PACK" -> reloadPack(OraxenPlugin.get(), sender);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:25: error: : expected
case "RECIPES" -> RecipesManager.reload(OraxenPlugin.get());
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:25: error: illegal start of expression
case "RECIPES" -> RecipesManager.reload(OraxenPlugin.get());
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:25: error: ';' expected
case "RECIPES" -> RecipesManager.reload(OraxenPlugin.get());
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:26: error: : expected
case "CONFIGS" -> OraxenPlugin.get().reloadConfigs();
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:26: error: illegal start of expression
case "CONFIGS" -> OraxenPlugin.get().reloadConfigs();
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:26: error: ';' expected
case "CONFIGS" -> OraxenPlugin.get().reloadConfigs();
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:27: error: : expected
default -> {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:27: error: illegal start of expression
default -> {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:27: error: ';' expected
default -> {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:34: error: ')' expected
}
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\ReloadCommand.java:35: error: illegal start of expression
});
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:27: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:27: error: not a statement
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:27: error: ';' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:55: error: 'else' without 'if'
} else {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:65: error: ')' expected
if (!(itemMeta instanceof Damageable damageable))
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:65: error: illegal start of expression
if (!(itemMeta instanceof Damageable damageable))
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\RepairCommand.java:65: error: ';' expected
if (!(itemMeta instanceof Damageable damageable))
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:8: error: class, interface, or enum expected
public record Glyph(String name, char character, String texture, int ascent,
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:11: error: class, interface, or enum expected
public JsonObject toJson() {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:13: error: class, interface, or enum expected
JsonArray chars = new JsonArray();
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:14: error: class, interface, or enum expected
chars.add(String.valueOf(character));
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:15: error: class, interface, or enum expected
output.add("chars", chars);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:16: error: class, interface, or enum expected
output.addProperty("file", texture);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:17: error: class, interface, or enum expected
output.addProperty("ascent", 8);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:18: error: class, interface, or enum expected
output.addProperty("height", height);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:19: error: class, interface, or enum expected
output.addProperty("type", "bitmap");
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:20: error: class, interface, or enum expected
return output;
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:21: error: class, interface, or enum expected
}
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:23: error: class, interface, or enum expected
public boolean hasPermission(Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\font\Glyph.java:25: error: class, interface, or enum expected
}
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:71: error: ')' expected
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:71: error: not a statement
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:71: error: ';' expected
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:80: error: ')' expected
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:80: error: not a statement
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:80: error: ';' expected
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:280: error: ')' expected
if (itemMeta instanceof Damageable damageable) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:280: error: not a statement
if (itemMeta instanceof Damageable damageable) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:280: error: ';' expected
if (itemMeta instanceof Damageable damageable) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:287: error: ')' expected
if (itemMeta instanceof LeatherArmorMeta leatherArmorMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:287: error: not a statement
if (itemMeta instanceof LeatherArmorMeta leatherArmorMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:287: error: ';' expected
if (itemMeta instanceof LeatherArmorMeta leatherArmorMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:294: error: ')' expected
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:294: error: not a statement
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:294: error: ';' expected
if (itemMeta instanceof PotionMeta potionMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:309: error: ')' expected
if (itemMeta instanceof SkullMeta skullMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:309: error: not a statement
if (itemMeta instanceof SkullMeta skullMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:309: error: ';' expected
if (itemMeta instanceof SkullMeta skullMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:317: error: ')' expected
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:317: error: not a statement
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\items\ItemBuilder.java:317: error: ';' expected
if (itemMeta instanceof TropicalFishBucketMeta tropicalFishBucketMeta) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:17: error: illegal start of expression
CustomAction action = switch (params[0]) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:17: error: not a statement
CustomAction action = switch (params[0]) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:17: error: ';' expected
CustomAction action = switch (params[0]) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:18: error: orphaned case
case "command" -> new CommandAction(params);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:18: error: : expected
case "command" -> new CommandAction(params);
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:18: error: illegal start of expression
case "command" -> new CommandAction(params);
^
100 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
2 actionable tasks: 2 executed
這似乎是由於使用舊版本的 Java 來編譯代碼,而此時必須至少使用 Java 16。 使用足夠新的 Java 版本應該可以解決這個特殊問題。
編譯器輸出在一些較新的 Java 功能上失敗:Java 16 中添加的模式匹配instanceof
運算符,以及 Java 14 中添加的switch 表達式。
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\commands\CommandsManager.java:52: error: ')' expected
if (sender instanceof Player player) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:17: error: ';' expected
CustomAction action = switch (params[0]) {
^
D:\compilar\Oraxen-master\src\main\java\io\th0rgal\oraxen\mechanics\provided\custom\CustomMechanicAction.java:18: error: orphaned case
case "command" -> new CommandAction(params);
^
鑒於失敗是由於較新的語言功能造成的,這告訴我問題很可能是由於使用了較舊的 Java 版本(Java 11 或更早版本)。
有兩種方法可以解決這個問題。 第一種(也是可移植性較差的)方法是確保構建在足夠新的 Java 版本下運行。 例如,在命令行下運行時, java --version
應在運行構建之前指示至少 16 的 Java 版本。 如果版本太舊,必須先安裝較新的版本。
第二種方法是指定要在 Gradle 構建中使用的 Java 版本。 這將確保構建始終與正確版本的 Java 一起使用。 使用較新版本的 Gradle,可以將Java 工具鏈配置為使用正確的版本:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(16)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.