簡體   English   中英

使用模式匹配 instanceof 和 switch 表達式的 Gradle Java 編譯錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM