IntelliJのでJavaの11のターゲットのJava 1.8でコンパイルする方法

steinybot:

私は、JDK 11が、IntelliJのでは、ターゲットのJava 1.8でコンパイルしようとしています。私が設定しています:

  • プロジェクトの設定:
    • プロジェクトのSDK:11
    • プロジェクトの言語レベル:8
  • Javaコンパイラセッティング:
    • クロスコンパイルに使用する「--release」オプション(Javaの9以降)
    • プロジェクトバイトコードのバージョン:8
  • モジュール設定:
    • プロジェクトのSDK(11)
    • 言語レベル:プロジェクトのデフォルト(8 - ラムダ、注釈などを入力)

私は内部のパッケージが存在しないというコンパイルエラーの束を取得します。--add-exports有効でない--target 1.8ことは助けにはならないようにします。

仕事をする唯一のものは、(Javaの11で実行しようとしたときに他の問題を引き起こすが、それは別の問題である)は、Java 1.8のプロジェクトSDKのバックを設定することです。

それはJDK 11とのIntelliJでターゲットのJava 1.8でコンパイルすることは可能ですか?

仕事にではなく、IntelliJのようですから、他の関連質問があります。

ZhekaKozlov:

あなたがしてコンパイルする場合は残念ながら、あなたは内部APIを使用することはできません--release Nオプション。これはで説明されてJEP 247

新しいコマンドラインオプションは、--release、自動的に特定のプラットフォームバージョンの実装にリンクするクラスファイルを生成するコンパイラを設定され、定義されています。Nがほぼ同じである--release。

N <9の場合:-source Nは、> N -bootclasspath <文書-のAPI-から-Nを-target

Nのために> = 9:N -source N --system <文書-のAPI-から-N>を-target。

そして、メインの段落を、次のとおりです。

N <9の場合は、文書化されたAPIは、から構成され、公開APIを JDK N.ためのjavacのデフォルトのブートクラスパス上にありました

私は、これは実際には大きな制限であることに同意します。あなたも、いつものOpenJDKの重要な一部となっていsun.misc.Unsafeを使用することはできません。

だから、あなたの質問はのIntelliJ IDEAとは何の関係もありません。これは、Javaプラットフォームの制限です。

次の2つの方法があります。

  • 内部APIを使用しないでください
  • コンパイルのために使用JDK 8

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=180268&siteId=1