当前位置: 首页 > 知识库问答 >
问题:

在Java1.7中是可选的?Gradle忽略源/目标兼容性?

洪昱
2023-03-14

尽管我的Java7项目依赖于Java.util.optional,但它在Gradle中构建得很好。

我非常非常困惑。Java.util.optional只是Java 8中的一个内容,对吗?

我有一个Gradle项目,并且我将SourceCompatibilityTargetCompatibility都设置为1.7

在这个模块的一个类中,我导入了Java.util.optional,我以为直到Java8才包含它。

如果我运行gradlew clean assemble,编译器甚至会用正确的选项调用。不过,有一个警告听起来有点可疑。然而,罐子构建得很好。

15:51:12.998 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':core:compileJava'.
15:51:13.000 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 1.7 -target 1.7 -d /Users/deejay/workspace/number-jumble/core/build/classes/main -g -encoding UTF-8 -classpath /Users/deejay/workspace/number-jumble/model/build/libs/model-1.0.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx/1.3.1/18995f8b7b19118975722370818023c76a86fdf4/gdx-1.3.1.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx-freetype/1.3.1/1f647429753c8c91fb8fc477ffe5a4c9cde2f429/gdx-freetype-1.3.1.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/NumberJumbleGame.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/complexity/ChangeComplexityScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/libgdx/SizeToAndLayoutAction.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/libgdx/TimeLabel.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/services/AppropriatelySizedFontService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/services/DateService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/GameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/HardcodedStreakAssessmentService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/LandscapeGameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/PortraitGameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/RackScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/RackSummaryScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/StreakAssessmentService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/splash/ReturnSplashScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/GdxLocalStatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/MapBackedStatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/StatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/StatisticsService.java
15:51:13.001 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler] Compiling with JDK Java compiler API.
15:51:13.007 [ERROR] [system.err] warning: [options] bootstrap class path not set in conjunction with -source 1.7
15:51:13.185 [ERROR] [system.err] 1 warning

我要疯了吗?

共有1个答案

益明朗
2023-03-14

你不会疯了吧

Java.util.optional是在Java8中引入的。这是正确的。我猜您是在针对Java8进行编译。因此使用的类(和检查的类)实际上是Java8中的类。

sourcecompatibility只影响所使用的语法样式。而不是使用的类。例如,如果将此设置为1.7,就不能使用lambda表达式。但是您可以使用Java8的类。如果你使用新java的类,你的应用程序将在运行时失败。

targetcompatibility只影响已编译语言级别。所以java二进制类代码的版本。同样,在编译过程中访问java类是可能的,但如果使用较旧版本的java执行,则会失败,原因仅仅是引用的类不存在。

 类似资料:
  • 我在gradle文件中的当前配置是 这个规范使我的项目特定于Java1.7。 我的要求是我应该能够为不同的java版本构建我的项目,比如Java1.7和Java1.8 PS:就像gradle中的概要文件构建一样,我们可以指定不同的java版本。

  • 从这个问答中,我尝试了不同的解决方案,但没有一个奏效。 这里是顶层建筑。Gradle: 我试图在子项目中提高源代码的兼容性,但似乎没有效果。 子项目包含使用来自Java8的API的每个类,使用Java6的子项目预计会失败,但构建成功运行。 下面是父build.gradle文件: 父设置的内容。Gradle: 它是gradle.properties: 我正在打印和,它们对每个项目都有很好的值。 我正

  • 我目前正在使用gradle,似乎可以通过java插件设置sourcecompatibility和targetcompatibility 我想知道除了与旧的JDK向后兼容之外,我们使用sourcecompatibility/targetcompatibility的原因是什么? 如果没有设置sourcecompatibility/targetcompatibility,升级到最新的java会更容易吗?

  • 我找不到任何关于什么Java版本可以用于Android Gradle“源兼容性”和“目标兼容性”的选择的信息。 我可以获得当前的Java JDK路径,比如:'c://Program Files/Java/jdk1.7.0_45'到'1.7',那么选择是'1.7'还是'1.6'? 或者,如果您有一个到'1.8'的路径:'1.8'、'1.7'和'1.6'? 我如何确定哪些选择是可用的? 谢了!

  • 我在通过MapStruct映射字段时遇到问题。 我有两门课。第一个域类“事件”,例如带有字段 第二类是“EventForm”。EventForm具有字段: 当我想更新现有事件时,会发生以下情况:1)我通过Id从数据库中获取现有事件 <代码>事件事件=事件服务。获取(id) 事件id=10000,lastUpdate=11213123123; 2) 我正在将字段从表单映射到域类 <代码>事件=映射器

  • 在使用Java编译器(