簡體   English   中英

如何使用IntelliJ中的Java 11目標Java 1.8進行編譯

[英]How to compile with Java 11 target Java 1.8 in IntelliJ

我正在嘗試使用JDK 11編譯,但是在IntelliJ中使用Java 1.8。 我配置了:

  • 項目設置:
    • 項目SDK:11
    • 項目語言水平:8
  • Java編譯器設置:
    • 使用'--release'選項進行交叉編譯(Java 9及更高版本)
    • 項目字節碼版本:8
  • 模塊設置:
    • 項目SDK(11)
    • 語言級別:項目默認值(8 - Lambdas,類型注釋等)

我收到一堆編譯錯誤,說內部包不存在。 --add-exports對於--target 1.8無效,因此無效。

唯一可行的方法是將Project SDK設置回Java 1.8(當嘗試使用Java 11運行時會導致其他問題,但這是另一個問題)。

是否可以使用JDK 11編譯並在IntelliJ中定位Java 1.8?

還有其他相關的問題似乎有效,但不是來自IntelliJ:

遺憾的是,如果使用--release N選項進行編譯,則無法使用內部API。 這在JEP 247中描述:

定義了一個新的命令行選項--release,它自動配置編譯器以生成將鏈接到給定平台版本的實現的類文件。 --release N大致相當於:

對於N <9:-source N -target N -bootclasspath <recorded-APIs-from-N>,

對於N> = 9:-source N -target N --system <recorded-APIs-from-N>。

然后是主段落:

對於N <9,記錄的API由javac的JDK N的默認bootclasspath上的公共 API組成。

我同意這實際上是一個很大的限制。 你甚至不能使用sun.misc.Unsafe,它一直是OpenJDK的關鍵部分。

所以,你的問題與IntelliJ IDEA無關。 這是Java平台的一個限制。

你有兩種方式:

  • 不要使用內部API
  • 使用JDK 8進行編譯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM