問題タブ [java-9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JShell で可能な double から float への非可逆変換
私はJava9機能JShellを試していました。float 値を設定できません:
java - Java 9 で InaccessibleObjectException (「{member} をアクセス可能にできません: モジュール {A} は {B} に対して {package} を開きません」) を解決する方法は?
この例外は、Java 9 でアプリケーションを実行しているときに、さまざまなシナリオで発生します。特定のライブラリとフレームワーク (Spring、Hibernate、JAXB) は、特に発生しやすい傾向があります。Javassist の例を次に示します。
メッセージには次のように書かれています。
保護された最終的な java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) を作成できないと、java.lang.ClassFormatError がアクセス可能になる: モジュール java.base名前のないモジュール @ 1941a8ff に対して「java.lang を開きません」
例外を回避し、プログラムを正常に実行するにはどうすればよいですか?
java - jol は Java9 で少し壊れていますか?
Java-9 ビルド9-ea+149 および jol 0.6を使用します。
この簡単なコードを実行します:
出力:
このアクセス拒否部分は、メソッドの FieldData.java から取得されます。
実際の例外は次のとおりです。
フィールドを保護された一時的な int java.util.AbstractList.modCount にアクセス可能にできません: モジュール java.base は、名前のないモジュール @479d31f3 に対して「java.util を開きません」。
これは、安全でない機能がロックダウンされていることに関係していると思います。問題は、これを実行するにはどうすればよいですか?
私は次のようなプロパティを見てきました:
しかし、それがどのように見えるべきかを本当に伝えることはできません。
java - weakCompareAndSwap と compareAndSwap の比較
この質問は、それらの違いに関するものではありません。疑似障害とは何か、LL/SC でなぜそれが発生するのかを知っています。私の質問は、Intel x86 を使用していて Java-9 (ビルド 149) を使用している場合、アセンブリ コードに違いがあるのはなぜですか?
実行中:
compareAndSwapIntの出力(関連部分):
weakCompareAndSwapIntの出力:
出力全体を理解できるほど多才ではありませんが、lock addl と lock cmpxchgの違いははっきりとわかります。
編集 ピーターの答えは私に考えさせました。compareAndSwap が組み込み呼び出しになるかどうかを見てみましょう。
-XX:+PrintIntrinsics -XX:-PrintAssembly
次に、例を 2 回実行します。
-XX:DisableIntrinsic=_compareAndSwapInt
これは一種の奇妙です。出力はまったく同じ (まったく同じ命令) であり、組み込みを有効にすると次のような呼び出しが得られるという唯一の違いがあります。
そして無効:
これは興味深いことですが、組み込みコードが異なるのではないでしょうか?
EDIT-2 the8472 も理にかなっています。
lock addlは、私が知る限り、x86 でStoreBufferをフラッシュする mfence の代わりであり、原子性ではなく可視性に関係しています。このエントリの直前に、次のとおりです。
ここを見ると、アトミックにスワップを行っているように見えるAtomic:: cmpxchgへの別のネイティブ呼び出しに委任されます。
なぜそれが直接ロック cmpxchgの代わりにならないのかは、私には謎です。
maven - 自動モジュールで分割パッケージを処理するにはどうすればよいですか?
現在、既存のアプリケーションをジグソー モジュールに移行するテストを行っています。私のモジュールの 1 つは、Groovy プラグインと共に ElasticSearch を使用します。
- org.elasticsearch:elasticsearch
- org.elasticsearch.module:lang-groovy
残念ながら、それらは分割パッケージを共有しているため、次のようになりmvn install
ます。
x は lang.groovy と elasticsearch の両方からパッケージ org.elasticsearch.script.groovy を読み取ります
記述子内の必要なモジュールごとに 1 回、x は各モジュールの名前です。
Java 9が最終版になるまでに、より新しいelasticsearchバージョンが分割パッケージを排除すると思いますが、通常、従来の依存関係で分割パッケージを処理する方法はありますか?
モジュールパスではなくクラスパスにそれらを配置できることを望んでいましたが、メーリングリストでこの会話を読んだ後、Mavenコンパイラにそうするように指示する方法がないようです.
maven 3.3.9 - maven-compiler-plugin 3.6.0 - jdk9-ea+149 - エラスティックサーチ 2.3.3
java - jdk9でsun.fontのすべてのクラスを取得するにはどうすればよいですか
現在java8を使用している古いコードベースがあります。
jdk9-eaを使用するようにコードベースを移行しています。しかし、すべての sun.font クラスが以前のように利用できなくなっているようです。
より具体的には私が使用しています
- 複合フォント
- Font2D
- FontDesignMetrics
- フォントマネージャー
- FontManagerFactory
- SunFontManager
もっと..
java - IntelliJ は Java9-ea の Java ライブラリを理解していません
jdk9-ea 149を使用しており、サンプルjavafx アプリケーションを作成しました
IntelliJ は Java ライブラリを認識しません。すべての import ステートメントが赤色で表示され、それらはすべてグレー表示されます。java.util.List、java.util.ArrayListでも同じ問題があります。
外部でフォームをコンパイルすることはできますが、IntelliJ 2016.3.2 Ultimate Editionからコードをコンパイルすることはできません。
IntelliJ プロジェクトにいくつかのライブラリを追加する必要があるようですが、java9 ビルド 149 ジグソーではその方法がわかりません。
私は実験的な機能を使用していますが、インポートステートメントを理解していません - 以下の intellij 設定を参照してください
IntelliJ バージョン: IntelliJ 2016.3.2 Ultimate Edition Java バージョン: Java 9-ea ビルド: 149
maven - クラスパスのジグソー テストの依存関係: 別の JAR のスーパークラスにアクセスできないのはなぜですか?
現在、jdk9-ea+147 と maven-compiler-plugin 3.6.0 を使用して、既存の Java 8 (Maven) プロジェクトを Java 9 / Jigsaw に移行するテストを行っています。
src
ディレクトリをモジュールに変換し、ディレクトリをtest
非モジュールのままにしました。
予期testCompile
しないエラーが発生しました:
エラー: ExtractedArtifactStoreBuilder の build() が、アクセスできないクラスまたはインターフェイスで定義されています
もちろん、両方ExtractedArtifactStoreBuilder
が公開されていることを確認しました。build()
(パブリック) スーパークラスおよびパブリックからも継承されます。このコードは、JDK 8 で正常にコンパイルおよび実行されます。
ExtractArtifactStoreBuilder
スーパークラスとは異なるサードパーティ JAR で定義されていますが、Maven は両方をクラスパスに正しく配置します。紛らわしいことに、スーパークラスのクラス名は同じです (ただし、別のパッケージに存在します)。
私が見る限り、テスト コードでパブリックに継承されたメソッドにアクセスできるはずです。これは jdk9 アーリー アクセス バージョンのバグですか?
編集:より理解しやすいように、関連する JAR とクラスを少し抽象化したものを次に示します。名前の混乱が少なく、重要でないものは省略されています (実際の依存関係については、以下を参照してください)。
プロセス.jar
mongo.jar
ソース/テスト/Java/ExampleTest
最小限のセットアップで動作を再現できました。
pom.xml(抜粋)
src/main/java/module-info.java
src/test/java/ExampleTest.java (抜粋)
java - Eclipse 3.8 (または Juno) は Java 9 で実行できますか?
私のアプリケーションは Eclipse 3.8 に基づいていますが、Java で実行できるかどうかを知りたいです。
パフォーマンスの問題があるため、新しいバージョンは使用していません。私の経験から、Eclipse 3.8 は Eclipse の新しいバージョンに比べてはるかに高速です。
誰かがこれについて何か知っていますか?
更新:前のタイトルは、Eclipse 3.8 で Java 9 の新機能をサポートできるようにすることを示唆している可能性があります。しかし、Java 9 JRE でアプリケーションを実行できるかどうかを知りたいだけです。
lombok - Project Lombok は Java 9 をサポートしていますか?
私は自分のプロジェクトで Lombok を使用しましたが、同僚はそれを使用することに同意しません。彼の理由は ( lombok ドキュメントの論争から)</p>
Project Lombok のこれらの部分はどちらも、非公開 API を利用して魔術を実行します。これは、Project Lombok が後続の IDE または JDK リリースで壊れるリスクがあることを意味します。
しかし、これは 2010 年に書かれた非常に古いドキュメントであり、おそらく現在は問題が解決されているので、Lombok が Java 9 をサポートするかどうか、また非公開 API を引き続き使用するかどうかを知りたいです。