首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用源代码选项编译Java 11代码

无法用源代码选项编译Java 11代码
EN

Stack Overflow用户
提问于 2020-03-03 18:53:18
回答 2查看 492关注 0票数 0

我正在尝试测试模块间的交叉编译。我有一个使用java 1.8的模块,另一个模块使用Java 11,我试图使用Java 11模块作为对Java1.8项目的依赖。当我试图编译Java 11模块时,maven显示了一个错误。

主模块

代码语言:javascript
复制
<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的辅助模块

代码语言:javascript
复制
<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>

辅助模块代码

代码语言:javascript
复制
public class Test {
    public void test(){
        System.out.println(" ".isEmpty()); //true
    }
}

理论上,我应该能够用java 11编译器编译辅助模块,并在minJava8JRE中使用它。因此,我也可以在Java 8项目中使用它作为依赖项。我在哪里失踪了?

错误

代码语言:javascript
复制
 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]

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-03-03 19:00:59

主要原因是不能使用低于target值的target值。如果希望代码与Java1.8兼容,请将源代码降低到1.8

票数 1
EN

Stack Overflow用户

发布于 2020-03-03 19:59:34

谢谢@Elliott Frisch

有几个术语;

JAVA_HOME :它是由JAVA_HOME定义的,或者如果您通过为Maven选择另一个JAVA_HOME来覆盖它,就是这样。您可以用Java 11编译器编译Java 6代码。因为它有向后兼容性。

源:您希望使用Java特性的最低java版本。例如,如果我想使用lambdas,至少我必须使用源代码8。如果我想使用Java 11特性,我需要将它设置为11。是关于特性的所有内容。

目标:最小的JRE版本,可以运行我的特性。例如,如果我设置了Java 8,至少需要JRE 8来使用lambdas。我不能使用JRE 7或更低,因为他们不知道lambda是什么。

也是

如果java编译器版本为8,则无法编译源代码11类。因为编译器不知道如何编译Java 11。一开始我失败了,因为我的源代码比源代码低。当我更改为11 & 11时,我再次失败,因为这次编译器更老了(它是Java 8)。

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60513814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档