【问题标题】:Is There A Difference Between targetCompatability And Running Gradle With That JDK?targetCompatability 和使用该 JDK 运行 Gradle 之间有区别吗?
【发布时间】:2020-10-22 19:41:12
【问题描述】:

我需要用 JDK7 编译和运行我的 jar。

但是,如果我尝试使用 JDK7 运行 gradle,我正在使用的 gradle 插件会失败。

我已经在 build.gradle 中指定了源和目标:

sourceCompatibility = '1.7'
targetCompatibility = '1.7'

如果我使用 JDK8 运行构建,字节码看起来是否与使用 JDK7 运行构建相同?

【问题讨论】:

  • 您是否收到任何错误消息?否则我可以推荐这个post关于java交叉编译。

标签: java gradle


【解决方案1】:

首先,请注意您的问题中有一个错字(re:“兼容性”)。你会想要这个:

apply plugin: 'java'

compileJava {
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'
}

我创建了一个工作插图here。虽然没有必要,但使用SDK Man! 之类的工具更容易测试(轻松切换JDK)。

实验不使用使用标志:

  • 使用 JDK 8(例如sdk use java 8u131
  • 编辑 build.gradle 以便注释掉兼容性标志
  • gradle clean compileJava
  • 切换到 JDK 7(例如sdk use java 7.0.181-zulu
  • 运行代码(见./run.sh
    • 这应该会失败,因为它是作为 JDK 8 构建的(以下错误)
Exception in thread "main" java.lang.UnsupportedClassVersionError: Example : Unsupported major.minor version 52.0

标志实验:

  • 使用 JDK 8(例如sdk use java 8u131
  • 编辑build.gradle 以便启用兼容性标志
  • gradle clean compileJava
  • 切换到 JDK 7(例如sdk use java 7.0.181-zulu
  • 运行代码(见./run.sh
    • 这应该可以工作,因为有兼容性标志

【讨论】:

  • 不涉及 JDK8 特定代码,因此不会像您提到的那样失败。问题更多是关于提到交叉编译的评论。
猜你喜欢
  • 2012-02-16
  • 2010-09-15
  • 2013-06-13
  • 2019-10-18
  • 1970-01-01
  • 2020-01-11
  • 2016-12-02
  • 2021-10-09
  • 2010-09-27
相关资源
最近更新 更多