Невозможно скомпилировать Java 11 код с параметрами источника - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь проверить кросс-компиляцию между модулями. У меня есть модуль, который использует 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]

Спасибо.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Основная причина в том, что вы не можете использовать значение source, которое меньше значения target. Если вы хотите, чтобы код был совместим с Java 1.8, уменьшите источник до 1.8

0 голосов
/ 03 марта 2020

Я понял это благодаря @Elliott Frisch

Есть несколько терминов;

Java Компилятор : Это определяется JAVA_HOME или если вы переопределите, выбрав другую версию Java для Maven. Вы можете скомпилировать Java 6 кодов с помощью Java 11 компилятора. Потому что он имеет обратную совместимость.

Источник : минимальная Java версия, для которой вы хотите использовать java функции. Например, если я хочу использовать лямбды, по крайней мере, я должен использовать источник 8. Если я хочу использовать Java 11 функций, мне нужно установить его на 11. Это все о Java функций, которые вы хочу использовать

Target : минимальная версия JRE, которая может запускать мои функции. Например, если я установлю Java 8, мне понадобится как минимум JRE 8, чтобы использовать лямбды. Я не могу использовать JRE 7 или ниже, потому что они не знают, что такое лямбда.

Также

Если версия компилятора java равна 8, он не может скомпилировать исходные 11 классов. Потому что компилятор не знает, как скомпилировать Java 11. Я потерпел неудачу в начале, потому что у меня был ниже, чем источник. Когда я перешел на 11 и 11, я снова потерпел неудачу, потому что на этот раз компилятор был старше (это было Java 8)

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...