【问题标题】:Is it possible to compile project on java 8 for target java 6?是否可以在 java 8 上为目标 java 6 编译项目?
【发布时间】:2018-01-08 08:57:49
【问题描述】:

我正在尝试在 java 8 上构建一个项目,指定 java 6 作为目标:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>

项目设置:

通用 IDE(Java 编译器)设置:

最后我遇到了错误:

javacTask:源版本 1.8 需要目标版本 1.8

有没有可能在 java 8 上以 java 6 为目标构建项目?

【问题讨论】:

  • 您不能将源 1.8 与目标 1.6 结合起来。两者都使用 1.6(假设您的源代码实际上是 Java 6)
  • 我不确定答案,但认为您(至少)需要将“项目设置”屏幕截图中的“项目语言级别”更改为 6。我相信这就是 IntelliJ用于确定您可以使用哪些功能,因此,如果您想在 Java 6 上运行,您将无法使用 Lambda 等。
  • 理论上将源和目标都切换到 1.6 会构建您的项目。但是,要运行 spring 应用程序,您需要使用 jre 1.6 上支持的 spring 版本和设置
  • Java 8 具有 Java 6 中没有的特性,包括字节码级别。开始工作并非易事,您可能很容易遇到细微的错误。为什么要这样做?

标签: java maven intellij-idea


【解决方案1】:

您可以使用 Java 8 进行开发并以 JDK 6 为目标,但需要进行一些调整。

如果您使用Retrolambda 之类的插件,并结合StreamSupportThreeTen 等向后移植的库,您可以在旧版JDK 上使用更新的功能。

请务必使用 Animal Sniffer 以确保您没有使用更新的 Java API 方法或类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2020-12-25
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多