2017-07-28 7 views
6

で許可されていない私は、次のプログラムを持っています--release引数で失敗します。は、システムモジュールからパッケージのエクスポートが--release

> javac --add-exports java.base/sun.nio=a --release 9 module-info.java Main.java 
error: exporting a package from system module java.base is not allowed with --release 
1 error 

基本的には、これら2つのコマンドは同等です。なぜ後者は禁止されていますか?

また、IDEAはjavacに--release引数を渡すため、プロジェクトに内部APIが必要な場合はIDEAでの開発が不可能になります。

私はJDK 9 + 178を使用しています。

+0

で一貫して動作することが可能に関係することは 'についてです - -add-exports'を実行します。私の質問は '--add-exports'と' --release'を組み合わせて完全に違ったものにすることです。 – ZhekaKozlov

+0

合意しました。コメントを削除します:) – Tavo

+0

Michael Easterが正しく言っているように、このオプションの組み合わせはjavacでは禁止されていますので、IDEAの開発者がコンパイラの呼び出しを調整できるようになりました。私はhttps://youtrack.jetbrainsを提出しました。com/issue/IDEA-176994 - うまくいけば、すぐに修正される予定です。 –

答えて

3

--release--add-exports--add-reads、そして--patch-moduleと組み合わせて使用​​することができないというthis bug ticketから表示されます。ここでは、全体的な提案が取得しても 可能な異なる行動のコストで、JDK 9および(予想)JDK 10の間--release 9作品一貫 を作ることです

:リンクから


$ <jdk9>/javac Test.java
$ <jdk9>/javac --release 9 Test.java

また:

のようなコマンドの

与えられたJDKリリースでサポートされているAPIを使用して、 コンパイルコードを許可します。

特に提案はである:

[編集] --add輸出の

-prevents使用、-add-読み取り、と組み合わせてシステム・モジュール用のモジュールを--patch - リリース(任意のバージョン)

Hereが含まれているファイルの差分である:

をシステムモジュールからパッケージをエクスポート{0}らありません --release

でlowed私は根拠ではなく、上記の引用からコメントすることはできません、それはJDK 9は、その質問@Tavo JDK 10

+0

したがって、Java 10ではプラットフォームモジュールからパッケージをエクスポートできません。 – ZhekaKozlov

+0

Java 10では、 '--release'の組み合わせとプラットフォームモジュールからのパッケージのエクスポートを許可しません。私は '--add-exports'だけがJava 10で利用できないと結論づけることはできません。それは別の質問です。元の質問に最もよく答える答えを受け入れてください。 –

+2

答えは正しいです。 '--release'のアイデアは、特定のリリースの* public * APIをコンパイルすることです。署名はjavacで記録されバンドルされています。一方、 '--add-exports'とその友人は、*現在のリリースの* private *(publicと同様)APIを変更することができます。これらのオプションを組み合わせるには、javacはすべてのパッケージとすべてのリリースのクラスのレコードを持つ必要があります。 –

関連する問題