簡體   English   中英

無法使用源選項編譯 Java 11 代碼

[英]Can't Compile Java 11 Code With Source Options

我正在嘗試測試模塊之間的交叉編譯。 我有一個使用 Java 1.8 的模塊,另一個使用 Java 11 的模塊。我試圖使用 Java 11 模塊作為對 Java 1.8 項目的依賴。 當我嘗試編譯 Java 11 模塊時,maven 顯示錯誤。

主要模塊

<project>
        <dependencies>
            <dependency>
                <groupId>com.berkin</groupId>
                <artifactId>java</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>

        <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>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
</project>

名為 Java 的輔助模塊

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.berkin</groupId>
    <artifactId>java</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

輔助模塊上的代碼

public class Test {
    public void test(){
        System.out.println(" ".isEmpty()); //true
    }
}

從理論上講,我應該能夠使用 java 11 編譯器編譯輔助模塊並在 min Java 8 JRE 中使用它。 因此我也可以在 Java 8 項目中使用它作為依賴項。 我在哪里失蹤?

錯誤

 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project java: Fatal error compiling: invalid source release: 11 -> [Help 1]

謝謝。

主要原因是您不能使用低於targetsource值。 如果您希望代碼與 Java 1.8 兼容,請將源代碼降低到 1.8

感謝@Elliott Frisch,我明白了

有幾個術語;

Java 編譯器:它由 JAVA_HOME 定義,或者如果您通過為 Maven 選擇另一個 Java 版本進行覆蓋,那就是它。 您可以使用 Java 11 編譯器編譯 Java 6 代碼。 因為它具有向后兼容性。

來源:您要使用 Java 功能的最低 Java 版本。 例如,如果我想使用 lambdas,至少我必須使用 source 8。如果我想使用 Java 11 features,我需要將它設置為 11。它都是關於你想要使用的 Java Features

目標:可以運行我的功能的最低 JRE 版本。 例如,如果我設置 Java 8,我至少需要 JRE 8 才能使用 lambda。 我不能使用 JRE 7 或更低版本,因為他們不知道 lambda 是什么。

如果 java 編譯器版本為 8,則無法編譯源 11 類。 因為編譯器不知道如何編譯Java 11。我一開始失敗了,因為我低於源代碼。 改成11&11的時候又失敗了,因為這次編譯器比較老了(是Java 8)

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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