「Java」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(同期)
 
(6人の利用者による、間の15版が非表示)
1行目: 1行目:
 
[[Category:プログラミング言語]]
 
[[Category:プログラミング言語]]
 
[[Category:Oracle]]
 
[[Category:Oracle]]
[[cs:Java]]
 
 
[[de:Java]]
 
[[de:Java]]
 
[[en:Java]]
 
[[en:Java]]
[[es:Java]]
 
[[fa:Java]]
 
[[fr:Java]]
 
[[it:Java]]
 
 
[[pt:Java]]
 
[[pt:Java]]
 
[[ru:Java]]
 
[[ru:Java]]
19行目: 14行目:
 
:Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン ([[Wikipedia:ja:Java仮想マシン|JVM]]) で動くバイトコードにコンパイルされます。
 
:Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン ([[Wikipedia:ja:Java仮想マシン|JVM]]) で動くバイトコードにコンパイルされます。
   
Arch Linux は公式でオープンソースの [https://openjdk.java.net/ OpenJDK] バージョン7・8・10・11をサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト {{Ic|archlinux-java}} を使って切り替えることが可能です。他の Java 環境は [[AUR]] からインストールすることができますが公式のサポートはありません。
+
Arch Linux はオープンソースの [https://openjdk.java.net/ OpenJDK] の[[Wikipedia:Java version history#Release_table|バージョン]] 811、17、21 (''Long-Term Support'' (LTS) のバージョン群)、そして 22 (最新バージョン) 公式にサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト {{ic|archlinux-java}} ({{Pkg|java-runtime-common}} パッケージによってインストールされます) を使って切り替えることが可能です。他の Java 環境はいくつか [[Arch User Repository]] からインストールすることができますが公式のサポートはありません。
   
 
== インストール ==
 
== インストール ==
   
 
{{Note|
 
{{Note|
* Arch Linux が公式にサポートしているのは [[#OpenJDK|OpenJDK]] 実装だけです。
+
* ''Arch Linux'' が公式にサポートしているのは [[#OpenJDK|OpenJDK]] 実装だけです。
* インストールした後、Java 環境をシェルに認識させる必要があります ({{Ic|$PATH}} 変数)。コマンドラインから {{Ic|/etc/profile}} を source するか、デスクトップ環境ログアウトログインが必要です。}}
+
* インストール後、Java 環境をシェルに認識させる必要があります ({{ic|$PATH}} 変数)。コマンドラインから {{ic|/etc/profile}} を source するか、[[デスクトップ環境]]か一度ログアウトしてログインし直すか、または再起動することで、シェルに認識させることができます。
  +
}}
   
依存パッケージとして自動的にインストールされ {{Pkg|java-runtime-common}} {{Pkg|java-environment-common}} という名前の2つの''共通''パッケージには環境ファイル {{Ic|/etc/profile.d/jre.sh}} が入っています。このファイルには全ての JVM 環境で共通の変数が含まれています。また、{{Pkg|java-runtime-common}} パッケージにはデフォルトの Java 環境を表示したり変更することができるユーティリティスクリプト {{Ic|archlinux-java}} も付いています。このスクリプトは衝突しないように {{Ic|/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} }} にイストールされた Java 環境や Java ランタイムに {{Ic|/usr/lib/jvm/default}} {{Ic|/usr/lib/jvm/default-runtime}} からリン設定ます。
+
2つの ''共通'' パッケージがそれぞれ依存パッケージとしてインストールされます: {{Pkg|java-runtime-common}} (全ての ''Java Runtime Environment''共通のファイルが含まれています) と {{Pkg|java-environment-common}} (全て''Java Development Kit'' に共通のファイルが含まれています) です。提供される環境ファイル {{ic|/etc/profile.d/jre.sh}} は、シボリックリンクによって参照されている {{ic|/usr/lib/jvm/default/bin}} を指しており、このシンボリックリンクは {{ic|archlinux-java}} ヘルパースリプトによって設定されます。
   
  +
{{Warning|シンボリックリンク である {{ic|/usr/lib/jvm/default}} と {{ic|/usr/lib/jvm/default-runtime}} を変更したい場合は、'''必ず''' {{ic|archlinux-java}} を使う必要があります。}}
さらに Java 環境セットによる全ての実行ファイルのために {{Ic|/usr/bin}} にリンクを作成・更新します。{{Ic|/etc/profile.d/jdk.sh}} ファイルは現在どのパッケージにも入っていません。
 
  +
  +
これは、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}</nowiki>}} 内のデフォルトの作業 ''Java'' 環境や、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre</nowiki>}} 内の ''Java'' ランタイムを表示したり指定したりするために使用されます。
  +
  +
Java 環境のほとんどの実行ファイルは、{{ic|/usr/bin/}} 内のダイレクトリンクによって提供されます。一方、その他は {{ic|$PATH}} でアクセスできます。
   
 
=== OpenJDK ===
 
=== OpenJDK ===
   
  +
[[Wikipedia:ja:OpenJDK|OpenJDK]] は、''Java Platform, Standard Edition'' (Java SE) のオープンソースな実装であり、公式リファレンス実装として指定されています。''OpenJDK'' ビルドには、[https://adoptium.net Adoptium] (以前は ''AdoptOpenJDK'' として知られていました) や [https://aws.amazon.com/corretto/ Amazon Corretto] などの複数のディストリビューターが存在しています。''Arch Linux OpenJDK'' パッケージは[https://hg.openjdk.java.net/ 上流の OpenJDK ソースコード]からビルドされています。
[[Wikipedia:ja:OpenJDK|OpenJDK]] は Java Platform, Standard Edition (Java SE) のオープンソース実装です。
 
   
;ヘッドレス JRE: 最小限の Java 実行環境 - GUI Java プログラムを実行するに必要。
+
;ヘッドレス JRE: 最小限の ''Java'' 実行環境 - GUI な ''Java'' プログラムを実行するために必要。
;フル JRE: 完全な Java 実行環境 - Java の GUI プログラムを実行するに必要。ヘッドレス JRE に依存
+
;フル JRE: 完全な ''Java'' 実行環境 - ''Java'' の GUI プログラムを実行するために必要。
;JDK:[[Wikipedia:ja:Java Development Kit|Java Development Kit]] - Java で開発するに必要。フル JRE に依存
+
;JDK:[[Wikipedia:ja:Java Development Kit|Java Development Kit]] - ''Java'' で開発するために必要。
  +
  +
JDK、JRE、そして JRE ヘッドレスは互いに衝突します。これは、より小さいパッケージがより大きいパッケージのサブセットであるためです。つまり、JDK は JRE を提供すると同時に JRE と衝突し、JRE はヘッドレス JRE を提供すると同時にヘッドレス JRE と衝突します。
   
 
{| class="wikitable"
 
{| class="wikitable"
 
! バージョン !! ヘッドレス JRE !! フル JRE !! JDK !! ドキュメント !! ソース
 
! バージョン !! ヘッドレス JRE !! フル JRE !! JDK !! ドキュメント !! ソース
 
|-
 
|-
| [https://openjdk.java.net/projects/jdk/11/ OpenJDK 11] || {{Pkg|jre-openjdk-headless}} || {{Pkg|jre-openjdk}} || {{Pkg|jdk-openjdk}} || {{Pkg|openjdk-doc}} || {{Pkg|openjdk-src}}
+
| [https://openjdk.java.net/projects/jdk/22/ OpenJDK 22] || {{Pkg|jre-openjdk-headless}} || {{Pkg|jre-openjdk}} || {{Pkg|jdk-openjdk}} || {{Pkg|openjdk-doc}} || {{Pkg|openjdk-src}}
 
|-
 
|-
| [https://openjdk.java.net/projects/jdk/10/ OpenJDK 10] || {{Pkg|jre10-openjdk-headless}} || {{Pkg|jre10-openjdk}} || {{Pkg|jdk10-openjdk}} || {{Pkg|openjdk10-doc}} || {{Pkg|openjdk10-src}}
+
| [https://openjdk.java.net/projects/jdk/21/ OpenJDK 21] || {{Pkg|jre21-openjdk-headless}} || {{Pkg|jre21-openjdk}} || {{Pkg|jdk21-openjdk}} || {{Pkg|openjdk21-doc}} || {{Pkg|openjdk21-src}}
 
|-
 
|-
| [https://openjdk.java.net/projects/jdk8/ OpenJDK 8] || {{Pkg|jre8-openjdk-headless}} || {{Pkg|jre8-openjdk}} || {{Pkg|jdk8-openjdk}} || {{Pkg|openjdk8-doc}} || {{Pkg|openjdk8-src}}
+
| [https://openjdk.java.net/projects/jdk/17/ OpenJDK 17] || {{Pkg|jre17-openjdk-headless}} || {{Pkg|jre17-openjdk}} || {{Pkg|jdk17-openjdk}} || {{Pkg|openjdk17-doc}} || {{Pkg|openjdk17-src}}
 
|-
 
|-
| [https://openjdk.java.net/projects/jdk7/ OpenJDK 7] || {{Pkg|jre7-openjdk-headless}} || {{Pkg|jre7-openjdk}} || {{Pkg|jdk7-openjdk}} || {{Pkg|openjdk7-doc}} || {{Pkg|openjdk7-src}}
+
| [https://openjdk.java.net/projects/jdk/11/ OpenJDK 11] || {{Pkg|jre11-openjdk-headless}} || {{Pkg|jre11-openjdk}} || {{Pkg|jdk11-openjdk}} || {{Pkg|openjdk11-doc}} || {{Pkg|openjdk11-src}}
  +
|-
  +
| [https://openjdk.java.net/projects/jdk8/ OpenJDK 8] || {{Pkg|jre8-openjdk-headless}} || {{Pkg|jre8-openjdk}} || {{Pkg|jdk8-openjdk}} || {{Pkg|openjdk8-doc}} || {{Pkg|openjdk8-src}}
 
|}
 
|}
   
  +
{{App|OpenJDK GA|Oracle による最新 OpenJDK 一般公開リリースビルド。|https://jdk.java.net|{{AUR|java-openjdk-bin}}}}
{{App|IcedTea-Web|Java Web Start と旧式の Java ブラウザプラグイン。|https://icedtea.classpath.org/wiki/IcedTea-Web|{{Pkg|icedtea-web}}}}
 
  +
{{App|OpenJDK EA|Oracle による開発版用の最新 OpenJDK 早期アクセスビルド。|https://jdk.java.net|{{AUR|java-openjdk-ea-bin}}}}
{{App|OpenJFX 8|JavaFX のオープンソース実装。Oracle による JRE と JDK の実装である Java SE を利用している場合はパッケージをインストールする必要はありません [https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases]。オープンソースの Java 実装 (OpenJDK プロジェクト) を使っているユーザーのためのパッケージです。|https://openjdk.java.net/projects/openjfx/|{{Pkg|java-openjfx}}, {{Pkg|java-openjfx-doc}}, {{Pkg|java-openjfx-src}}}}
 
{{App|OpenJFX|最新OpenJFX コミュニティビルド。|https://openjfx.io/|{{AUR|java-openjfx-bin}}}}
+
{{App|OpenJDK Wakefield|Linux 版 JDK 用の未完成Wayland デスクトップサポート。|https://openjdk.org/projects/wakefield/|{{AUR|jdk-openjdk-wakefield}}}}
  +
{{App|IcedTea-Web|Java Web Start と非推奨の Java ブラウザプラグイン。|https://icedtea.classpath.org/download/icedtea-web-docs/1.8/html/en/icedtea-web.html|{{Pkg|icedtea-web}}}}
{{App|OpenJDK EA|最新開発版の OpenJDK アーリーアクセスビルド。|https://jdk.java.net|{{AUR|java-openjdk-ea-bin}}}}
 
  +
{{App|OpenJFX EA|最新開発版の OpenJFX アーリーアクセスビルド。|https://openjfx.io/|{{AUR|java-openjfx-ea-bin}}}}
 
  +
=== OpenJFX ===
  +
  +
[https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX] は、[[Wikipedia:ja:JavaFX|JavaFX]] のオープンソースな実装です。''Oracle JDK'' を使用している場合は、このパッケージをインストールする[https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases 必要はありません]。このパッケージは、''Java'' のオープンソース実装 (''OpenJDK'' プロジェクト) やその派生版のユーザのみを対象としています。
  +
  +
{| class="wikitable"
  +
! バージョン !! 実行環境及び開発環境 !! ドキュメント !! ソース
  +
|-
  +
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 22] || {{AUR|java-openjfx}} || {{AUR|java-openjfx-doc}} || {{AUR|java-openjfx-src}}
  +
|-
  +
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 21] || {{AUR|java21-openjfx}} || {{AUR|java21-openjfx-doc}} || {{AUR|java21-openjfx-src}}
  +
|-
  +
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 17] || {{AUR|java17-openjfx}} || {{AUR|java17-openjfx-doc}} || {{AUR|java17-openjfx-src}}
  +
|-
  +
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 11] || {{AUR|java11-openjfx}} || {{AUR|java11-openjfx-doc}} || {{AUR|java11-openjfx-src}}
  +
|-
  +
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 8] || {{AUR|java8-openjfx}} || {{AUR|java8-openjfx-doc}} || {{AUR|java8-openjfx-src}}
  +
|}
   
 
=== 他の実装 ===
 
=== 他の実装 ===
   
  +
* {{App|Oracle JDK|Oracle の OpenJDK 商用ライセンスビルド。一部のバージョンは手動ダウンロードでしか利用できないことに注意してください。手動ダウンロードでは、OTN 契約に署名し、Oracle アカウントを作成する必要があります。|https://www.oracle.com/java/technologies/downloads/|
{{App|Java SE|Oracle による JRE と JDK の実装。|https://www.oracle.com/technetwork/java/javase/downloads/index.html|{{AUR|jre}} {{AUR|jre9}} {{AUR|jre8}} {{AUR|jre7}} {{AUR|jre6}} {{AUR|jdk}} {{AUR|jdk9}} {{AUR|jdk8}} {{AUR|jdk7}} {{AUR|jdk6}} {{AUR|jdk5}} {{AUR|jdk-devel}}}}
 
  +
: JRE: {{AUR|jre}} {{AUR|jre-lts}} {{AUR|jre11}} {{AUR|jre8}} {{AUR|jre7}}
{{App|OpenJ9|IBM から Eclipse に継承された JRE の実装。|https://www.eclipse.org/openj9/|{{AUR|jdk9-openj9-bin}} {{AUR|jdk8-openj9-bin}}}}
 
  +
: JDK: {{AUR|jdk}} {{AUR|jdk-lts}} {{AUR|jdk11}} {{AUR|jdk8}} {{AUR|jdk7}}
{{App|IBM J9|IBM による第7・8版 JRE の実装。|https://developer.ibm.com/javasdk/|{{AUR|jdk8-j9-bin}}{{Broken package link|パッケージが存在しません}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}}
 
  +
}}
{{App|Parrot VM|[http://www.parrot.org/ Parrot] は VM であり、異なる2つの方法によって実験的に [http://trac.parrot.org/parrot/wiki/Languages Java をサポート] しています: [https://code.google.com/p/parrot-jvm/ Java VM バイトコード翻訳機] もしくは [https://github.com/chrisdolan/perk Parrot VM のための Java コンパイラ]。|http://www.parrot.org/|{{AUR|parrot}}}}
 
  +
* {{App|Eclipse Adoptium/Temurin|Eclipse の JRE/JDK 実装。Hotspot JVM (以前は AdoptOpenJDK) をベースとしています。この JRE は、Eclipse Temurin として知られています。|https://adoptium.net/| {{AUR|jdk-temurin}} {{AUR|jdk17-temurin}} {{AUR|jdk11-temurin}}
  +
}}
  +
* {{App|AWS Corretto|OpenJDK の Amazon Web Services ディストリビューション。|https://aws.amazon.com/corretto/| {{AUR|amazon-corretto-8}} {{AUR|amazon-corretto-11}} {{AUR|amazon-corretto-17}} {{AUR|amazon-corretto-21-bin}} {{AUR|amazon-corretto-22-bin}}
  +
}}
  +
* {{App|OpenJ9|IBM によって提供されている、J9 JVM ベースの、Eclipse の JRE/JDK 実装。|https://www.eclipse.org/openj9/| {{AUR|jdk-openj9-bin}} {{AUR|jdk17-openj9-bin}} {{AUR|jdk11-openj9-bin}} {{AUR|jdk8-openj9-bin}}
  +
}}
  +
* {{App|IBM Certified|IBM Semeru Runtime Certified Edition。|https://www.ibm.com/semeru-runtimes/downloads|{{AUR|jdk11-j9-bin}}}}
  +
* {{App|IBM J9|IBM の JRE 実装。OpenJ9 のコードを使用。|https://www.ibm.com/support/pages/java-sdk-downloads|{{AUR|jdk8-j9-bin}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}}
  +
* {{App|Liberica JDK|BellSoft の Liberica JDK 実装。|https://bell-sw.com/libericajdk/|{{AUR|liberica-jre-8-full-bin}} {{AUR|liberica-jdk-8-full-bin}} {{AUR|liberica-jre-11-bin}} {{AUR|liberica-jre-11-full-bin}} {{AUR|liberica-jdk-11-bin}} {{AUR|liberica-jdk-11-full-bin}} {{AUR|liberica-jdk-17-full-bin}} {{AUR|liberica-jdk-21-full-bin}}}}
  +
* {{App|Microsoft OpenJDK|Microsoft の OpenJDK 実装。|https://www.microsoft.com/openjdk/| {{AUR|microsoft-openjdk-11-bin}} {{AUR|microsoft-openjdk-17-bin}} {{AUR|microsoft-openjdk-21-bin}}}}
  +
* {{App|Azul JDK|Azul の JDK 実装。OpenJDK の Azul Zulu ビルドはオープンソースですが、OpenJDK の Azul Zulu Prime ビルドは開発と評価用では無料の商用製品であることに注意してください。|https://www.azul.com/downloads/|
  +
: Zulu: {{AUR|zulu-8-bin}} {{AUR|zulu-11-bin}} {{AUR|zulu-17-bin}} {{AUR|zulu-21-bin}}
  +
: Zulu Prime: {{AUR|jdk17-zulu-prime-bin}}
  +
}}
   
{{Note|32ビット版の Java SE はパッケージの前に {{ic|bin32-}} 付きます例: {{AUR|bin32-jre}} や {{AUR|bin32-jdk}}。これらのパッケージは後ろに {{ic|32}} が付く {{Pkg|java-runtime-common}} として機能す {{AUR|java32-runtime-common}} を使用します例: {{ic|java32}}。}}
+
{{Note|OpenJDK の 32 ビット版は、64 ビット版のパッケージの前に {{ic|bin32-}} けることで見つけることができます (例: {{AUR|bin32-jre}})。これらのパッケージは {{AUR|java32-runtime-common}} を使用します。{{AUR|java32-runtime-common}} パッケージは {{Pkg|java-runtime-common}} として機能しまが、ツール名に接尾辞 {{ic|32}} が付きます (例: {{ic|java32}})。これは、32 ビット JDK パッケージによってのみ使用される {{AUR|java32-environment-common}} でも同じです。}}
   
 
=== 開発ツール ===
 
=== 開発ツール ===
   
統合開発環境については[[アプリケーション一覧/ユーティリティ#統合開発環境]]や ''Java IDE'' サブセクションを見てください。
+
統合開発環境については [[アプリケーション一覧/ユーティリティ#統合開発環境]] や ''Java IDE'' サブセクションを見てください。
   
{{AUR|proguard}} などの難読化ツールを使うことでリバースエンジニアリングを行いにくくすることができます。
+
リバースエンジニアリングを困難にするには、{{AUR|proguard}} などの難読化ツールを使できます。
   
 
==== 逆コンパイラ ====
 
==== 逆コンパイラ ====
   
* {{App|Bytecode Viewer|Java リバースエンジニアリングスイート逆コンパイラ・エディタ・デバッガが含まれています。|https://bytecodeviewer.com|{{AUR|bytecode-viewer}}}}
+
* {{App|CFR|Java 9、10、及びそれ以降の最近の機能をサポートしている Java 逆コンパイラ。|https://www.benf.org/other/cfr/|{{Pkg|cfr}}}}
* {{App|CFR|Java 9, 10 以降しい機能をサポートする Java 逆コンパイラ。|https://www.benf.org/other/cfr/|{{AUR|cfr}}}}
+
* {{App|Fernflower|[[IntelliJ IDEA]]一部とて開発されている Java 解析逆コンパイラ。|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}}
* {{App|Fernflower|[[IntelliJ IDEA]] の一部として開発されている Java の解析逆コンパイラ。|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}}
+
* {{App|Vineflower|Fernflower からフォークされ Java 逆コンパイラ。コードの品質を向上させることを目的としています。[[IntelliJ IDEA]] プラグインとしても利用できます。|https://github.com/Vineflower/vineflower|{{AUR|vineflower}}}}
* {{App|[[Wikipedia:JAD (software)|JAD]]|メンテナンスが止まっている Java 逆コンパイラ。|https://varaneckas.com/jad|{{Pkg|jad}}}}
+
* {{App|Krakatau|Java 逆コンパイラ、アセンブラ、逆アセンブラ。|https://github.com/Storyyeller/Krakatau|{{AUR|krakatau-git}}}}
  +
* {{App|Procyon decompiler|実験的な Java 逆コンパイラ。ILSpy と Mono.Cecil の影響を受けています。|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{Pkg|procyon-decompiler}}}}
* {{App|JD-Core-java|[[Wikipedia:Java Decompiler|Java Decompiler]] の薄いラッパー。|https://github.com/nviennot/jd-core-java|{{AUR|jd-core-java}}}}
 
* {{App|Krakatau|Java 逆コンパイラ・アセンブラ・逆アセンブラ。|https://github.com/Storyyeller/Krakatau|{{AUR|krakatau-git}}}}
+
* {{App|Java Decompiler (JD-Core)|人気な Java 逆コンパイラ。GUI (JD-GUI を参照) を提供し、Java 1~10 をサポートしています。|https://java-decompiler.github.io/|{{AUR|jd-core-java}}}}
  +
* {{App|Jadx|Android DEX から Java に逆コンパイルします。オプションの GUI 有り (Jadx-GUI を参照)。|https://github.com/skylot/jadx|{{Pkg|jadx}}}}
* {{App|Procyon decompiler|ILSpy と Mono.Cecil の影響を受けた実験的な Java 逆コンパイラ。|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{AUR|procyon-decompiler}}, GUI: {{AUR|luyten}}}}
 
  +
* {{App|[[Wikipedia:JAD (software)|JAD]]|メンテナンスされていない Java 逆コンパイラ (最後のリリースは 2006 年です)。|https://varaneckas.com/jad|{{Pkg|jad}}}}
  +
  +
==== GUI フロントエンド ====
  +
  +
* {{App|Bytecode Viewer|Java のリバースエンジニアリングスイート。逆コンパイラ、エディタ、そしてデバッガを含んでいます。CFR/Fernflower/Procyon のフロントエンドです。|https://bytecodeviewer.com|{{AUR|bytecode-viewer}}}}
  +
* {{App|Recaf|使いやすいモダンな Java バイトコードエディタ。Java プログラムの複雑さを抽象化します。CFR/Fernflower/Procyon のフロントエンドです。|https://www.coley.software/Recaf/|{{AUR|recaf-bin}}}}
  +
* {{App|Java Decompiler (JD-GUI)|人気な Java 逆コンパイラ。GUI を提供し、Java 1~10 をサポートしています。JD-Core のフロントエンドです。|https://java-decompiler.github.io/|{{AUR|jd-gui}}}}
  +
* {{App|Jadx-GUI|Android APK DEX から Java に逆コンパイルします。オプションの GUI 有り。Jadx のフロントエンドです。|https://github.com/skylot/jadx|{{Pkg|jadx}}}}
  +
* {{App|Luyten|オープンソースの Java 逆コンパイラ GUI。Procyon のフロントエンドです。|https://github.com/deathmarine/Luyten|{{AUR|luyten}}}}
   
 
== JVM の切り替え ==
 
== JVM の切り替え ==
   
ヘルパースクリプト {{Ic|archlinux-java}} を使って切り替えることができます:
+
ヘルパースクリプト {{Ic|archlinux-java}} ({{Pkg|java-runtime-common}} パッケージ) は、以下のような機能提供します:
   
 
archlinux-java <COMMAND>
 
archlinux-java <COMMAND>
101行目: 145行目:
 
例:
 
例:
   
  +
{{hc
$ archlinux-java status
 
  +
|$ archlinux-java status
Available Java environments:
 
  +
|Available Java environments:
java-7-openjdk (default)
 
  +
java-11-openjdk (default)
 
java-8-openjdk/jre
 
java-8-openjdk/jre
  +
}}
   
''(default)'' は {{Ic|java-7-openjdk}} がデフォルトに設定されていることを示しています。{{Ic|java}} やその他のバイナリの呼び出しはこの Java インストールに基づきます。また、上の出力では OpenJDK 8 の ''JRE'' しかインストールされていないに注意してください。
+
''(default)'' は {{ic|java-11-openjdk}} がデフォルトに設定されていることを示しています。{{ic|java}} やその他のバイナリの呼び出しはこの Java インストールに基づきます。また、上の出力では OpenJDK 8 の ''JRE'' しかインストールされていないことに注意してください。
   
 
=== デフォルトの Java 環境を変更 ===
 
=== デフォルトの Java 環境を変更 ===
116行目: 162行目:
 
# archlinux-java set java-8-openjdk/jre
 
# archlinux-java set java-8-openjdk/jre
   
  +
{{Tip|利用可能な {{ic|<JAVA_ENV_NAME>}} 名を各にするには、{{ic|archlinux-java status}} を使ってください。}}
{{Ic|archlinux-java}} では存在しない Java 環境は設定できません。上の例では、{{pkg|jre8-openjdk}} はインストールされていますが {{pkg|jdk8-openjdk}} はインストール'''されていない'''ため {{Ic|java-8-openjdk}} を設定しようとしても失敗します:
 
   
  +
{{ic|archlinux-java}} は、存在しない Java 環境を設定することはできません。前の例では、{{Pkg|jre8-openjdk}} はインストールされていますが {{Pkg|jdk8-openjdk}} はインストール'''されていない'''ため、{{ic|java-8-openjdk}} を設定しようとしても失敗します:
# archlinux-java set java-8-openjdk
 
  +
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path
 
  +
{{hc|# archlinux-java set java-8-openjdk|
  +
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path
  +
}}
   
 
=== デフォルトの Java 環境の設定を解除 ===
 
=== デフォルトの Java 環境の設定を解除 ===
   
パッケージが設定を管理するため Java 環境の設定を解除する必要はありません。それでも設定を解除したいときは、{{Ic|unset}} コマンドを使って下さい:
+
パッケージが設定を管理するためJava 環境の設定を解除する必要はないはずです。それでも設定を解除したいときは、{{ic|unset}} コマンドを使って下さい:
   
 
# archlinux-java unset
 
# archlinux-java unset
129行目: 178行目:
 
=== デフォルトの Java 環境を修正 ===
 
=== デフォルトの Java 環境を修正 ===
   
存在しない Java 環境のリンクが設定されている場合、{{Ic|archlinux-java fix}} コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (公式でサポートされているパッケージ "OpenJDK 8" がまず初めに使われます。他のインストール環境はその後です):
+
存在しない Java 環境のリンクが設定されている場合、{{ic|archlinux-java fix}} コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (ここでは、公式でサポートされているパッケージ "OpenJDK 8" がまず初めに使われます。他のインストール環境はその後です):
   
 
# archlinux-java fix
 
# archlinux-java fix
135行目: 184行目:
 
=== デフォルトでないバージョンの Java を使ってアプリケーションを起動 ===
 
=== デフォルトでないバージョンの Java を使ってアプリケーションを起動 ===
   
デフォルトのバージョン以外の Java を使ってアプリケーションを起動したい場合 (例えば jre7jre8 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトのバージョンjre7 で、jre8 を使いたい場合:
+
デフォルトのバージョン以外の Java を使ってアプリケーションを起動したい場合 (例えばバージョン 1811 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトが java 18 で、java 11 を使いたい場合:
   
#!/bin/sh
+
#!/bin/sh
 
 
export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH
+
export PATH="/usr/lib/jvm/java-11-openjdk/bin/:$PATH"
 
exec /path/to/application "$@"
 
exec /path/to/application "$@"
   
  +
[[Systemd]] サービスの場合、[[ドロップインファイル]] で {{ic|JAVA_HOME}} を環境変数に追加することで可能です:
== {{Ic|archlinux-java}} をサポートするのに必要なパッケージの条件 ==
 
   
  +
{{hc|/etc/systemd/system/''unit''.d/override.conf|2=
{{Note|以下の情報は32ビットの Java パッケージである {{ic|archlinux32-java}} にも同じく当てはまります。パッケージや実行ファイルの名前には {{ic|32}} を含めてください。}}
 
  +
[Service]
  +
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
  +
}}
   
  +
== archlinux-java をサポートするために必要なパッケージの前提条件 ==
このセクションは [[AUR]] に新しい JVM のパッケージを投稿し、Arch Linux の JVM の扱いかたにあわせて {{Ic|archlinux-java}} を使用したいパッケージ作成者を対象にしています。パッケージは以下の条件を満たす必要があります:
 
   
  +
{{Note|以下の情報は32ビットの Java パッケージである {{ic|archlinux32-java}} にも同じく当てはまります。必要に応じて、パッケージや実行ファイルの名前には {{ic|32}} を含めてください。}}
* 全てのファイルは {{Ic|/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} }} 以下に配置
 
  +
* 該当するパッケージに [https://www.archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] や [https://www.archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common] に入っているリンクの実行可能ファイルがあること
 
  +
このセクションでは、代替 JVM 用のパッケージを [[AUR]] で提供したいパッケージ製作者が、パッケージを Arch Linux の JVM スキームと統合できる (つまり、{{ic|archlinux-java}} と互換性を持たせる) ようにするための説明を行います。これに関しては、パッケージ制作者は以下のことを行う必要があります:
* リンクが [https://www.archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] や [https://www.archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common] にない場合にのみ、{{Ic|/usr/bin}} から実行可能ファイルへのリンク
 
  +
* man ページの末尾に {{Ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} をつけて衝突しないようにする ([https://www.archlinux.org/packages/extra/x86_64/jre8-openjdk/files/ jre8-openjdk のファイルリスト]を見れば {{Ic|-openjdk8}} を付ける man ページがわかります)
 
  +
* 全てのファイルは {{ic|/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} }} 以下に配置すること
* 他の JDK や {{Ic|java-runtime}}, {{Ic|java-runtime-headless}}, {{Ic|java-environment}} の [[PKGBUILD#conflicts|conflicts]] や [[PKGBUILD#replaces|replaces]] は宣言しない
 
  +
* {{pkg|java-runtime-common}} と {{pkg|java-environment-common}} が提供するシンボリックリンクに対応する全ての実行ファイルが、該当するパッケージにおいて利用可能であること。(訳注: 例えば、{{Pkg|java-runtime-common}} は {{ic|/usr/bin/java}} シンボリックリンクを提供していますが、あなたの作成したパッケージにもこれに対応する実行ファイルが含まれていなければなりません。その他のシンボリックリンクにおいても同様です。)
* ''install 関数''で {{Ic|archlinux-java}} スクリプトを使って'''他の Java 環境が設定されていない場合に''' Java 環境をデフォルトに設定 (強制的にデフォルトとしてインストールしてはいけません)。サンプルは[https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/java7-openjdk 公式にサポートされている Java 環境のパッケージのソース]を参照。
 
  +
* シンボリックリンクがまだ [{{pkg|java-runtime-common}} と {{pkg|java-environment-common}} に存在しない場合にのみ、{{ic|/usr/bin}} から実行ファイルへのシンボリックリンクを同梱すること。
  +
* man ページの末尾に {{ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} を付けて、衝突しないようにすること ({{pkg|jre8-openjdk}} のファイルリストを見れば {{ic|-openjdk8}} を付ける man ページがわかります)
  +
* 他の JDK、{{ic|java-runtime}}、{{ic|java-runtime-headless}}、{{ic|java-environment}} を [[PKGBUILD#conflicts|conflicts]] や [[PKGBUILD#replaces|replaces]] として宣言しないこと。
  +
* ''install 関数''で {{ic|archlinux-java}} スクリプトを使って、'''他の有効な Java 環境が設定されていない場合に''' 自身の Java 環境をデフォルトに設定すること (つまり、パッケージは'''強制的に'''デフォルトとして設定するべきでは'''ありません''')。サンプルは[https://gitlab.archlinux.org/archlinux/packaging/packages/java-openjdk 公式にサポートされている Java 環境のパッケージのソース]を参照。
   
 
他の注意事項:
 
他の注意事項:
  +
* Java 環境が必要なパッケージでベンダーを問わない場合は通常通りに {{Ic|java-runtime}}, {{Ic|java-runtime-headless}} または {{Ic|java-environment}} を依存パッケージとして宣言してください
 
* '''特定の Java ベンダー'''が必要パッケージは適当なパッケージを依存パッケージとして宣言してください
+
* '''任意''' Java 環境を必要とするパッケージは、通常通り {{ic|java-runtime}}、{{ic|java-runtime-headless}}、{{ic|java-environment}} のどれかを依存関係として宣言すること。
* OpenJDK パッケージは {{Ic|1=provides="java-runtime-openjdk=${pkgver}"}} など宣言していま。このためサードパーティのパッケージはバージョンを指定せず OpenJDK を依存パッケージとして宣言することができます
+
* '''特定の Java ベンダ'''必要とパッケージは、それ対応するパッケージを依存関係として宣言すること
  +
* OpenJDK パッケージでは、{{ic|1=provides="java-runtime-openjdk=${pkgver}"}} などが宣言されるようになっています。これにより、サードパーティのパッケージではバージョンを指定せずに OpenJDK を依存関係として宣言できるようになっています。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
  +
 
=== MySQL ===
 
=== MySQL ===
  +
JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。[[MariaDB#リモートアクセスを有効にする|MariaDB の記事]]の指示に従って下さい。
 
  +
JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。[[MariaDB#リモートアクセスを有効にする]] の指示に従って下さい。
  +
  +
=== IntelliJ IDEA ===
  +
  +
IntelliJ IDEA がシステムの JAVA SDK のパスと共に {{ic|The selected directory is not a valid home for JDK}} と出力する場合、他の JDK パッケージをインストールして、そのパッケージを IDEA の JDK として選択する必要があるかもしれません。
   
 
=== 他のウィンドウマネージャになりすます ===
 
=== 他のウィンドウマネージャになりすます ===
[https://tools.suckless.org/x/wmname suckless.org] の {{pkg|wmname}} を使うことで JVM に他のウィンドウマネージャを動かしていると信じこませることが可能です。これによって [[Awesome]], [[Dwm]], [[Ratpoison]] などのウィンドウマネージャで起こる Java の GUI のレンダリング問題が解決する可能性があります。
 
   
  +
[https://tools.suckless.org/x/wmname suckless.org] の {{Pkg|wmname}} を使うことで、他のウィンドウマネージャを動かしていると JVM に信じ込ませることができます。これによって、[[Awesome]] や [[Dwm]]、[[Ratpoison]] のようなウィンドウマネージャで発生する Java の GUI レンダリング問題を解決できる場合があります。これがうまく行く理由は、JVM には[[Wikipedia:ja:リペアレンティング型ウィンドウマネージャ|リペアレンティング型]]でない既知のウィンドウマネージャのハードコードされたリストが含まれているからです。皮肉なことに、一部のユーザは、[[wikipedia:Project_Looking_Glass|Sun によって Java で記述された]]リペアレンティング型でないウィンドウマネージャである {{ic|LG3D}} になりすますことを好みます。"compiz" や "Metacity"、"LG3D" に設定してみてください:
$ wmname LG3D
 
   
  +
$ wmname ''ウィンドウマネージャ名''
(wmname コマンドを実行した後、アプリケーションを再起動してください。)
 
   
  +
wmname コマンドを実行した後、問題が発生しているアプリケーションを再起動する必要があります。
これが機能するのは JVM にはハードコードされた既知の、ノンリペアレントウィンドウマネージャのリストが含まれているためです。最大の皮肉として、[[wikipedia:Project_Looking_Glass|Sun によって Java で書かれた]]ノンリペアレントウィンドウマネージャである {{ic|LG3D}} になりすますことを好むユーザーもいます。
 
  +
  +
あるいは、[https://github.com/zheludkovm/JavaMatePatch javaagent JavaMatePatch] を使うこともできます。これは、[[MATE]] においてウィンドウマネージャ名を設定し、Java Swing アプリがフルスクリーン時に不適切な挙動を行うバグを解決するために作成されました。使用するには、{{ic|1=-javaagent:JavaMatePatch-1.0.0-SNAPSHOT.jar=''ウィンドウマネージャ名''}} を java オプションに追加してください。
   
 
=== フォントが読みにくい ===
 
=== フォントが読みにくい ===
  +
 
下の [[#フォントレンダリングを改善する]] で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。{{AUR|ttf-ms-fonts}} パッケージをインストールしてください。
 
下の [[#フォントレンダリングを改善する]] で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。{{AUR|ttf-ms-fonts}} パッケージをインストールしてください。
   
=== 特定のアプリケーションでテキストが表示されない ===
+
=== 一部のアプリケーションでテキストが表示されない ===
特定のアプリケーションでテキストが完全に表示されない場合は {{Bug|40871}} で提案されているように [[#ヒントとテクニック]] のオプションを使うと直るかもしれません。
 
   
  +
一部のアプリケーションでテキストが全く表示されない場合は {{Bug|40871}} で提案されているように [[#ヒントとテクニック]] のオプションを使うと直るかもしれません。
=== Too many levels of symbolic links ===
 
   
  +
=== 灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる ===
以下のようなエラーが表示される場合:
 
   
  +
標準の Java GUI ツールキットには、「リペアレンティング型でない」ウィンドウマネージャのハードコードされたリストがあります。そのリストに無いウィンドウマネージャを使用すると、一部の Java アプリケーションで問題が発生する可能性があります。最も一般的な問題の1つが、Java アプリケーションが GUI をレンダリングせずにのっぺりとした灰色のボックスとして表示される「灰色のウィンドウ」問題です。クリックでメニューを開いてもすぐに閉じてしまう問題も発生することがあります。
/usr/bin/java: line 2: /usr/lib/jvm/default/bin/java: Too many levels of symbolic links
 
/usr/bin/java: line 2: exec: /usr/lib/jvm/default/bin/java: cannot execute: Too many levels of symbolic links
 
   
  +
解決に役立つ方法がいくつか存在します:
[[#デフォルトの Java 環境を修正|デフォルトの Java 環境を修正]]することで問題が解決するはずです。[https://bbs.archlinux.org/viewtopic.php?pid=1453803] も見て下さい。
 
  +
  +
* [[#他のウィンドウマネージャになりすます]] を参照してください。
  +
* {{Pkg|jre8-openjdk}} の場合、{{ic|1=_JAVA_AWT_WM_NONREPARENTING=1}} [[環境変数]]を設定してください。
  +
* その後のバージョンでは、{{ic|1=AWT_TOOLKIT=MToolkit}} [[環境変数]]を設定してください。
  +
* [[xmonad]] の場合、[https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Using_SetWMName SetWMName] を使用してください。ただし、{{ic|XMonad.Hooks.EwmhDesktops}} を使うと効果がキャンセルされてしまうことがあります。その場合、{{ic|>> setWMName "LG3D"}} を {{ic|LogHook}} に追加すると解決できる場合があります。
  +
  +
詳細は [https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console] を参照してください。
   
 
=== JavaFX アプリケーションのデバッグ時にシステムがフリーズする ===
 
=== JavaFX アプリケーションのデバッグ時にシステムがフリーズする ===
   
JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション {{Ic|1=-Dsun.awt.disablegrab=true}} を使ってみてください。
+
JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション {{ic|1=-Dsun.awt.disablegrab=true}} を使ってみてください。
   
詳しくは https://bugs.java.com/view_bug.do?bug_id=6714678 を参照。
+
https://bugs.java.com/bugdatabase/view_bug?bug_id=6714678 を参照。
   
 
=== JavaFX の MediaPlayer コンストラクタが例外を投げる ===
 
=== JavaFX の MediaPlayer コンストラクタが例外を投げる ===
206行目: 276行目:
 
...
 
...
   
原因は JavaFX が Arch Linux のリポジトリに含まれている新しい {{pkg|ffmpeg}} と互換性がないためです。
+
原因は JavaFX が Arch Linux のリポジトリに含まれている新しい {{Pkg|ffmpeg}} と互換性がないためです。
   
解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。
+
解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。または、先のバージョンがビルドに失敗する場合は、{{AUR|ffmpeg3.4}} をインストールするとうまく行くかもしれません
   
 
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/
 
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/
   
 
=== Java アプリケーションで外部リンクを開けない ===
 
=== Java アプリケーションで外部リンクを開けない ===
  +
Java アプリケーションからウェブブラウザなどのリンクを開けない場合、{{Pkg|gvfs}} をインストールしてください。Desktop.Action.BROWSE メソッドが必要とします。[https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2] を参照。
 
  +
Java アプリケーションからウェブブラウザなどのリンクを開けない場合、{{Pkg|gvfs}} をインストールしてください。{{ic|Desktop.Action.BROWSE}} メソッドがこれを必要とします。[https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2] を参照。
  +
  +
アプリケーションが次のようなエラーメッセージを表示する場合、この問題が起こっている証拠です: {{ic|java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform!}}。
  +
  +
=== QuantumRenderer の初期化でエラー: no suitable pipeline found ===
  +
  +
考えられる問題と解決策:
  +
  +
* GTK2 が無い。{{Pkg|gtk2}} をインストールしてください。
  +
* OpenJFX が無い。{{AUR|java-openjfx}} をインストールしてください。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
{{Note|このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用されます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。}}
 
   
  +
{{Note|このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用できます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。}}
Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。[https://bbs.archlinux.org/viewtopic.php?id=72892 フォーラムの投稿]より、変数を設定するには {{Ic|~/.bashrc}} (もしくは全てのユーザーに適用するには {{Ic|/etc/profile.d/jre.sh}}) に次の行を追加してください:
 
   
  +
Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。[https://bbs.archlinux.org/viewtopic.php?id=72892 フォーラムの投稿]より、変数を設定するには {{Ic|~/.bashrc}} (もしくは全てのユーザーに適用するには {{ic|/etc/profile.d/jre.sh}}) に次の行を追加してください:
export _JAVA_OPTIONS="-D'''<option 1>''' -D'''<option 2>'''..."
 
  +
  +
export JDK_JAVA_OPTIONS="-D'''<option 1>''' -D'''<option 2>'''..."
   
 
例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:
 
例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:
   
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
+
export JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
  +
  +
このような変数は3つ存在しており、以下の表で後に説明されるオプションが優先されます。
  +
  +
{| class="wikitable"
  +
|-
  +
| JAVA_TOOL_OPTIONS
  +
| javac や jshell といったアプリケーションとツールに影響します。
  +
|-
  +
| JDK_JAVA_OPTIONS
  +
| アプリケーション (java コマンドで実行されるアプリケーション全て) に影響します。Java 9 が必要。
  +
|-
  +
| (コマンドラインオプション)
  +
| "クラス名" の引数の前で指定される引数は Java オプションです。
  +
|-
  +
| _JAVA_OPTIONS
  +
| 古い方法。アプリケーションとツールに影響します。
  +
|}
   
 
=== フォントレンダリングを改善する ===
 
=== フォントレンダリングを改善する ===
  +
クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: {{Ic|1=-Dawt.useSystemAAFontSettings=on}}, {{Ic|1=-Dswing.aatext=true}}
 
  +
クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: {{ic|1=-Dawt.useSystemAAFontSettings=on}}, {{ic|1=-Dswing.aatext=true}}
   
 
詳しい情報は [[Java 実行環境のフォント]]を見てください。
 
詳しい情報は [[Java 実行環境のフォント]]を見てください。
   
=== コマンドラインの 'Picked up _JAVA_OPTIONS' メッセージを消す ===
+
=== コマンドラインの 'Picked up JDK_JAVA_OPTIONS' メッセージを消す ===
  +
  +
JDK_JAVA_OPTIONS 環境変数を設定すると java (openjdk) から標準エラー出力に次のようなメッセージが書き出されます: 'Picked up JDK_JAVA_OPTIONS=...'。ターミナルにこのメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:
   
  +
SILENT_JAVA_OPTIONS="$JDK_JAVA_OPTIONS"
{{ic|_JAVA_OPTIONS}} 環境変数を設定すると java (openjdk) から標準出力に次のようなメッセージが書き出されます: 'Picked up _JAVA_OPTIONS=...'。ターミナルにメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:
 
  +
unset JDK_JAVA_OPTIONS
  +
alias java='java "$SILENT_JAVA_OPTIONS"'
   
  +
インタラクティブでないシェル (Java プログラムのランチャースクリプトなど) は、(通常) {{ic|~/.bashrc}} を読み込みません。ですが、export された変数を親プロセスから継承します ({{ic|~/.bash_profile}} を読み込むログインシェルからどこかの時点でその変数を継承します)。
_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"
 
  +
そうした場合、ファイルが読み取られるのを防ぐために、{{ic|~/.bashrc}} の先頭に文を置いているのが一般的です。そのようにして、変数がデスクトップメニューから起動されたプログラムに渡され、メッセージが邪魔をするインタラクティブシェルの場合は alias が代わりに使用されます (スクリプトでは alias は使用できません)。
unset _JAVA_OPTIONS
 
alias java='java "$_SILENT_JAVA_OPTIONS"'
 
   
 
=== GTK のルックアンドフィール ===
 
=== GTK のルックアンドフィール ===
Java プログラムの見た目が酷い場合、swing コンポーネントのデフォルトのルックアンドフィールを設定することができます: {{Ic|1=swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}.
 
   
頑固な Java プログラムはクロスプラットフォーム Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です: {{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}。
+
Java プログラムの見た目が酷い場合、swing コンポーネンのデフォルトのルックアンドフィールを設定することができます:
   
  +
swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
==== GTK3 のサポート ====
 
   
  +
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です:
バージョン 9 以前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。
 
   
  +
swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
[https://openjdk.java.net/jeps/283 Java 9] から、GTK のルックアンドフィールは GTK のバージョン {{Ic|2}}, {{Ic|2.2}}, {{Ic|3}} で動作するようになっており、デフォルトは GTK2 になっています。以下のプロパティを設定することで上書きすることができます:
 
   
  +
==== GTK3 のサポート ====
jdk.gtk.version=3
 
   
  +
バージョン 9 より前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK バージョン間の非互換性のせいで、GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュする場合があります。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば LibreOffice 5.0 などがこれに該当します。
=== 2D のパフォーマンスの向上 ===
 
   
  +
GTK ルックアンドフィールは GTK バージョン {{ic|2}}、{{ic|2.2}}、そして {{ic|3}} に対して実行でき、デフォルトは GTK3 です。これは、次のプロパティを設定することで上書きできます:
OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:
 
   
  +
jdk.gtk.version=2.2
export _JAVA_OPTIONS='-Dsun.java2d.opengl=true'
 
   
  +
=== HiDPI ===
{{Note|このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。}}
 
   
  +
GUI フレームワークによっては、他の方法を使うことで [[HiDPI#Java アプリケーション]] を利用可能にできます。
=== リペアレントしないウィンドウマネージャ ===
 
   
  +
=== 2D のパフォーマンスの向上 ===
リペアレントしないウィンドウマネージャを使用する場合は {{Ic|.xinitrc}} で以下の環境変数を設定してください:
 
   
  +
OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:
export _JAVA_AWT_WM_NONREPARENTING=1
 
   
  +
export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'
上記の設定を行わないと Java プログラムが正しく描画されないことがあります。
 
   
  +
{{Note|このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。}}
== 参照 ==
 
   
  +
{{TranslationStatus|Java|2024-09-22|816808}}
* [https://math.hws.edu/javanotes/ Introduction to Programming Using Java]
 

2024年9月22日 (日) 16:48時点における最新版

関連記事

Wikipedia より:

Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン (JVM) で動くバイトコードにコンパイルされます。

Arch Linux は、オープンソースの OpenJDKバージョン 8、11、17、21 (Long-Term Support (LTS) のバージョン群)、そして 22 (最新バージョン) を公式にサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト archlinux-java (java-runtime-common パッケージによってインストールされます) を使って切り替えることが可能です。他の Java 環境はいくつか Arch User Repository からインストールすることができますが、公式のサポートはありません。

目次

インストール

ノート:
  • Arch Linux が公式にサポートしているのは OpenJDK 実装だけです。
  • インストール後、Java 環境をシェルに認識させる必要があります ($PATH 変数)。コマンドラインから /etc/profile を source するか、デスクトップ環境から一度ログアウトしてログインし直すか、または再起動することで、シェルに認識させることができます。

2つの 共通 パッケージがそれぞれ依存パッケージとしてインストールされます: java-runtime-common (全ての Java Runtime Environment に共通のファイルが含まれています) と java-environment-common (全ての Java Development Kit に共通のファイルが含まれています) です。提供される環境ファイル /etc/profile.d/jre.sh は、シンボリックリンクによって参照されている /usr/lib/jvm/default/bin を指しており、このシンボリックリンクは archlinux-java ヘルパースクリプトによって設定されます。

警告: シンボリックリンク である /usr/lib/jvm/default/usr/lib/jvm/default-runtime を変更したい場合は、必ず archlinux-java を使う必要があります。

これは、/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} 内のデフォルトの作業 Java 環境や、/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre 内の Java ランタイムを表示したり指定したりするために使用されます。

Java 環境のほとんどの実行ファイルは、/usr/bin/ 内のダイレクトリンクによって提供されます。一方、その他は $PATH でアクセスできます。

OpenJDK

OpenJDK は、Java Platform, Standard Edition (Java SE) のオープンソースな実装であり、公式リファレンス実装として指定されています。OpenJDK ビルドには、Adoptium (以前は AdoptOpenJDK として知られていました) や Amazon Corretto などの複数のディストリビューターが存在しています。Arch Linux OpenJDK パッケージは上流の OpenJDK ソースコードからビルドされています。

ヘッドレス JRE
最小限の Java 実行環境 - 非 GUI な Java プログラムを実行するために必要。
フル JRE
完全な Java 実行環境 - Java の GUI プログラムを実行するために必要。
JDK
Java Development Kit - Java で開発するために必要。

JDK、JRE、そして JRE ヘッドレスは互いに衝突します。これは、より小さいパッケージがより大きいパッケージのサブセットであるためです。つまり、JDK は JRE を提供すると同時に JRE と衝突し、JRE はヘッドレス JRE を提供すると同時にヘッドレス JRE と衝突します。

バージョン ヘッドレス JRE フル JRE JDK ドキュメント ソース
OpenJDK 22 jre-openjdk-headless jre-openjdk jdk-openjdk openjdk-doc openjdk-src
OpenJDK 21 jre21-openjdk-headless jre21-openjdk jdk21-openjdk openjdk21-doc openjdk21-src
OpenJDK 17 jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-doc openjdk17-src
OpenJDK 11 jre11-openjdk-headless jre11-openjdk jdk11-openjdk openjdk11-doc openjdk11-src
OpenJDK 8 jre8-openjdk-headless jre8-openjdk jdk8-openjdk openjdk8-doc openjdk8-src

OpenJDK GA — Oracle による最新 OpenJDK 一般公開リリースビルド。

https://jdk.java.net || java-openjdk-binAUR

OpenJDK EA — Oracle による開発版用の最新 OpenJDK 早期アクセスビルド。

https://jdk.java.net || java-openjdk-ea-binAUR

OpenJDK Wakefield — Linux 版 JDK 用の未完成の Wayland デスクトップサポート。

https://openjdk.org/projects/wakefield/ || jdk-openjdk-wakefieldAUR

IcedTea-Web — Java Web Start と非推奨の Java ブラウザプラグイン。

https://icedtea.classpath.org/download/icedtea-web-docs/1.8/html/en/icedtea-web.html || icedtea-web

OpenJFX

OpenJFX は、JavaFX のオープンソースな実装です。Oracle JDK を使用している場合は、このパッケージをインストールする必要はありません。このパッケージは、Java のオープンソース実装 (OpenJDK プロジェクト) やその派生版のユーザのみを対象としています。

バージョン 実行環境及び開発環境 ドキュメント ソース
OpenJFX 22 java-openjfxAUR java-openjfx-docAUR java-openjfx-srcAUR
OpenJFX 21 java21-openjfxAUR java21-openjfx-docAUR java21-openjfx-srcAUR
OpenJFX 17 java17-openjfxAUR java17-openjfx-docAUR java17-openjfx-srcAUR
OpenJFX 11 java11-openjfxAUR java11-openjfx-docAUR java11-openjfx-srcAUR
OpenJFX 8 java8-openjfxAUR java8-openjfx-docAUR java8-openjfx-srcAUR

他の実装

  • Oracle JDK — Oracle の OpenJDK 商用ライセンスビルド。一部のバージョンは手動ダウンロードでしか利用できないことに注意してください。手動ダウンロードでは、OTN 契約に署名し、Oracle アカウントを作成する必要があります。
https://www.oracle.com/java/technologies/downloads/ ||
JRE: jreAUR jre-ltsAUR jre11AUR jre8AUR jre7AUR
JDK: jdkAUR jdk-ltsAUR jdk11AUR jdk8AUR jdk7AUR
  • Eclipse Adoptium/Temurin — Eclipse の JRE/JDK 実装。Hotspot JVM (以前は AdoptOpenJDK) をベースとしています。この JRE は、Eclipse Temurin として知られています。
https://adoptium.net/ || jdk-temurinAUR jdk17-temurinAUR jdk11-temurinAUR
  • AWS Corretto — OpenJDK の Amazon Web Services ディストリビューション。
https://aws.amazon.com/corretto/ || amazon-corretto-8AUR amazon-corretto-11AUR amazon-corretto-17AUR amazon-corretto-21-binAUR amazon-corretto-22-binAUR
  • OpenJ9 — IBM によって提供されている、J9 JVM ベースの、Eclipse の JRE/JDK 実装。
https://www.eclipse.org/openj9/ || jdk-openj9-binAUR jdk17-openj9-binAUR jdk11-openj9-binAUR jdk8-openj9-binAUR
  • IBM Certified — IBM Semeru Runtime Certified Edition。
https://www.ibm.com/semeru-runtimes/downloads || jdk11-j9-binAUR
  • IBM J9 — IBM の JRE 実装。OpenJ9 のコードを使用。
https://www.ibm.com/support/pages/java-sdk-downloads || jdk8-j9-binAUR jdk7-j9-binAUR jdk7r1-j9-binAUR
  • Liberica JDK — BellSoft の Liberica JDK 実装。
https://bell-sw.com/libericajdk/ || liberica-jre-8-full-binAUR liberica-jdk-8-full-binAUR liberica-jre-11-binAUR liberica-jre-11-full-binAUR liberica-jdk-11-binAUR liberica-jdk-11-full-binAUR liberica-jdk-17-full-binAUR liberica-jdk-21-full-binAUR
  • Microsoft OpenJDK — Microsoft の OpenJDK 実装。
https://www.microsoft.com/openjdk/ || microsoft-openjdk-11-binAUR microsoft-openjdk-17-binAUR microsoft-openjdk-21-binAUR
  • Azul JDK — Azul の JDK 実装。OpenJDK の Azul Zulu ビルドはオープンソースですが、OpenJDK の Azul Zulu Prime ビルドは開発と評価用では無料の商用製品であることに注意してください。
https://www.azul.com/downloads/ ||
Zulu: zulu-8-binAUR zulu-11-binAUR zulu-17-binAUR zulu-21-binAUR
Zulu Prime: jdk17-zulu-prime-binAUR


ノート: OpenJDK の 32 ビット版は、64 ビット版のパッケージ名の前に bin32- を付けることで見つけることができます (例: bin32-jreAUR)。これらのパッケージは java32-runtime-commonAUR を使用します。java32-runtime-commonAUR パッケージは java-runtime-common として機能しますが、ツール名に接尾辞 32 が付きます (例: java32)。これは、32 ビット JDK パッケージによってのみ使用される java32-environment-commonAUR でも同じです。

開発ツール

統合開発環境については アプリケーション一覧/ユーティリティ#統合開発環境Java IDE サブセクションを見てください。

リバースエンジニアリングを困難にするには、proguardAUR などの難読化ツールを使用できます。

逆コンパイラ

  • CFR — Java 9、10、及びそれ以降の最近の機能をサポートしている Java 逆コンパイラ。
https://www.benf.org/other/cfr/ || cfr
  • FernflowerIntelliJ IDEA の一部として開発されている Java 解析逆コンパイラ。
https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine || fernflower-gitAUR
  • Vineflower — Fernflower からフォークされた Java 逆コンパイラ。コードの品質を向上させることを目的としています。IntelliJ IDEA プラグインとしても利用できます。
https://github.com/Vineflower/vineflower || vineflowerAUR
  • Krakatau — Java 逆コンパイラ、アセンブラ、逆アセンブラ。
https://github.com/Storyyeller/Krakatau || krakatau-gitAUR
  • Procyon decompiler — 実験的な Java 逆コンパイラ。ILSpy と Mono.Cecil の影響を受けています。
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler || procyon-decompiler
  • Java Decompiler (JD-Core) — 人気な Java 逆コンパイラ。GUI (JD-GUI を参照) を提供し、Java 1~10 をサポートしています。
https://java-decompiler.github.io/ || jd-core-javaAUR
  • Jadx — Android DEX から Java に逆コンパイルします。オプションの GUI 有り (Jadx-GUI を参照)。
https://github.com/skylot/jadx || jadx
  • JAD — メンテナンスされていない Java 逆コンパイラ (最後のリリースは 2006 年です)。
https://varaneckas.com/jad || jad

GUI フロントエンド

  • Bytecode Viewer — Java のリバースエンジニアリングスイート。逆コンパイラ、エディタ、そしてデバッガを含んでいます。CFR/Fernflower/Procyon のフロントエンドです。
https://bytecodeviewer.com || bytecode-viewerAUR
  • Recaf — 使いやすいモダンな Java バイトコードエディタ。Java プログラムの複雑さを抽象化します。CFR/Fernflower/Procyon のフロントエンドです。
https://www.coley.software/Recaf/ || recaf-binAUR
  • Java Decompiler (JD-GUI) — 人気な Java 逆コンパイラ。GUI を提供し、Java 1~10 をサポートしています。JD-Core のフロントエンドです。
https://java-decompiler.github.io/ || jd-guiAUR
  • Jadx-GUI — Android APK DEX から Java に逆コンパイルします。オプションの GUI 有り。Jadx のフロントエンドです。
https://github.com/skylot/jadx || jadx
  • Luyten — オープンソースの Java 逆コンパイラ GUI。Procyon のフロントエンドです。
https://github.com/deathmarine/Luyten || luytenAUR

JVM の切り替え

ヘルパースクリプト archlinux-java (java-runtime-common パッケージ) は、以下のような機能を提供します:

archlinux-java <COMMAND>

COMMAND:
	status		インストールされている Java 環境と有効になっている環境を表示
	get			デフォルトに設定されている Java 環境を返す
	set <JAVA_ENV>	<JAVA_ENV> をデフォルトに設定
	unset			デフォルトの Java 環境の設定を解除
	fix			不正な Java 環境の設定を修正

インストールされている Java 互換環境を表示

$ archlinux-java status

例:

$ archlinux-java status
Available Java environments:
   java-11-openjdk (default)
   java-8-openjdk/jre

(default)java-11-openjdk がデフォルトに設定されていることを示しています。java やその他のバイナリの呼び出しはこの Java インストールに基づきます。また、上の出力では OpenJDK 8 の JRE しかインストールされていないことに注意してください。

デフォルトの Java 環境を変更

# archlinux-java set <JAVA_ENV_NAME>

例:

# archlinux-java set java-8-openjdk/jre
ヒント: 利用可能な <JAVA_ENV_NAME> 名を各にするには、archlinux-java status を使ってください。

archlinux-java は、存在しない Java 環境を設定することはできません。前の例では、jre8-openjdk はインストールされていますが jdk8-openjdk はインストールされていないため、java-8-openjdk を設定しようとしても失敗します:

# archlinux-java set java-8-openjdk
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path

デフォルトの Java 環境の設定を解除

パッケージが設定を管理するため、Java 環境の設定を解除する必要はないはずです。それでも設定を解除したいときは、unset コマンドを使って下さい:

# archlinux-java unset

デフォルトの Java 環境を修正

存在しない Java 環境のリンクが設定されている場合、archlinux-java fix コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (ここでは、公式でサポートされているパッケージ "OpenJDK 8" がまず初めに使われます。他のインストール環境はその後です):

# archlinux-java fix

デフォルトでないバージョンの Java を使ってアプリケーションを起動

デフォルトのバージョン以外の Java を使ってアプリケーションを起動したい場合 (例えばバージョン 18 と 11 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトが java 18 で、java 11 を使いたい場合:

#!/bin/sh

export PATH="/usr/lib/jvm/java-11-openjdk/bin/:$PATH"
exec /path/to/application "$@"

Systemd サービスの場合、ドロップインファイルJAVA_HOME を環境変数に追加することで可能です:

/etc/systemd/system/unit.d/override.conf
[Service]
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk

archlinux-java をサポートするために必要なパッケージの前提条件

ノート: 以下の情報は32ビットの Java パッケージである archlinux32-java にも同じく当てはまります。必要に応じて、パッケージや実行ファイルの名前には 32 を含めてください。

このセクションでは、代替 JVM 用のパッケージを AUR で提供したいパッケージ製作者が、パッケージを Arch Linux の JVM スキームと統合できる (つまり、archlinux-java と互換性を持たせる) ようにするための説明を行います。これに関しては、パッケージ制作者は以下のことを行う必要があります:

  • 全てのファイルは /usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} 以下に配置すること
  • java-runtime-commonjava-environment-common が提供するシンボリックリンクに対応する全ての実行ファイルが、該当するパッケージにおいて利用可能であること。(訳注: 例えば、java-runtime-common/usr/bin/java シンボリックリンクを提供していますが、あなたの作成したパッケージにもこれに対応する実行ファイルが含まれていなければなりません。その他のシンボリックリンクにおいても同様です。)
  • シンボリックリンクがまだ [java-runtime-commonjava-environment-common に存在しない場合にのみ、/usr/bin から実行ファイルへのシンボリックリンクを同梱すること。
  • man ページの末尾に -${VENDOR_NAME}${JAVA_MAJOR_VERSION} を付けて、衝突しないようにすること (jre8-openjdk のファイルリストを見れば -openjdk8 を付ける man ページがわかります)
  • 他の JDK、java-runtimejava-runtime-headlessjava-environmentconflictsreplaces として宣言しないこと。
  • install 関数archlinux-java スクリプトを使って、他の有効な Java 環境が設定されていない場合に 自身の Java 環境をデフォルトに設定すること (つまり、パッケージは強制的にデフォルトとして設定するべきではありません)。サンプルは公式にサポートされている Java 環境のパッケージのソースを参照。

他の注意事項:

  • 任意の Java 環境を必要とするパッケージは、通常通り java-runtimejava-runtime-headlessjava-environment のどれかを依存関係として宣言すること。
  • 特定の Java ベンダ を必要とするパッケージは、それに対応するパッケージを依存関係として宣言すること。
  • OpenJDK パッケージでは、provides="java-runtime-openjdk=${pkgver}" などが宣言されるようになっています。これにより、サードパーティのパッケージではバージョンを指定せずに OpenJDK を依存関係として宣言できるようになっています。

トラブルシューティング

MySQL

JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。MariaDB#リモートアクセスを有効にする の指示に従って下さい。

IntelliJ IDEA

IntelliJ IDEA がシステムの JAVA SDK のパスと共に The selected directory is not a valid home for JDK と出力する場合、他の JDK パッケージをインストールして、そのパッケージを IDEA の JDK として選択する必要があるかもしれません。

他のウィンドウマネージャになりすます

suckless.orgwmname を使うことで、他のウィンドウマネージャを動かしていると JVM に信じ込ませることができます。これによって、AwesomeDwmRatpoison のようなウィンドウマネージャで発生する Java の GUI レンダリング問題を解決できる場合があります。これがうまく行く理由は、JVM にはリペアレンティング型でない既知のウィンドウマネージャのハードコードされたリストが含まれているからです。皮肉なことに、一部のユーザは、Sun によって Java で記述されたリペアレンティング型でないウィンドウマネージャである LG3D になりすますことを好みます。"compiz" や "Metacity"、"LG3D" に設定してみてください:

$ wmname ウィンドウマネージャ名

wmname コマンドを実行した後、問題が発生しているアプリケーションを再起動する必要があります。

あるいは、javaagent JavaMatePatch を使うこともできます。これは、MATE においてウィンドウマネージャ名を設定し、Java Swing アプリがフルスクリーン時に不適切な挙動を行うバグを解決するために作成されました。使用するには、-javaagent:JavaMatePatch-1.0.0-SNAPSHOT.jar=ウィンドウマネージャ名 を java オプションに追加してください。

フォントが読みにくい

下の #フォントレンダリングを改善する で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。ttf-ms-fontsAUR パッケージをインストールしてください。

一部のアプリケーションでテキストが表示されない

一部のアプリケーションでテキストが全く表示されない場合は FS#40871 で提案されているように #ヒントとテクニック のオプションを使うと直るかもしれません。

灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる

標準の Java GUI ツールキットには、「リペアレンティング型でない」ウィンドウマネージャのハードコードされたリストがあります。そのリストに無いウィンドウマネージャを使用すると、一部の Java アプリケーションで問題が発生する可能性があります。最も一般的な問題の1つが、Java アプリケーションが GUI をレンダリングせずにのっぺりとした灰色のボックスとして表示される「灰色のウィンドウ」問題です。クリックでメニューを開いてもすぐに閉じてしまう問題も発生することがあります。

解決に役立つ方法がいくつか存在します:

  • #他のウィンドウマネージャになりすます を参照してください。
  • jre8-openjdk の場合、_JAVA_AWT_WM_NONREPARENTING=1 環境変数を設定してください。
  • その後のバージョンでは、AWT_TOOLKIT=MToolkit 環境変数を設定してください。
  • xmonad の場合、SetWMName を使用してください。ただし、XMonad.Hooks.EwmhDesktops を使うと効果がキャンセルされてしまうことがあります。その場合、>> setWMName "LG3D"LogHook に追加すると解決できる場合があります。

詳細は [1] を参照してください。

JavaFX アプリケーションのデバッグ時にシステムがフリーズする

JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション -Dsun.awt.disablegrab=true を使ってみてください。

https://bugs.java.com/bugdatabase/view_bug?bug_id=6714678 を参照。

JavaFX の MediaPlayer コンストラクタが例外を投げる

JavaFX のサウンドモジュールから MediaPlayer クラスのインスタンスを作成しようとしたときに以下の例外が発生することがあります (Oracle JDK と OpenJDK の両方で発生):

... (i.e. FXMLLoader construction exceptions) ...
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
 at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)
 at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511)
 at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414)
 at <constructor call>
...

原因は JavaFX が Arch Linux のリポジトリに含まれている新しい ffmpeg と互換性がないためです。

解決方法は ffmpeg-compat-55AUR をインストールすることです。または、先のバージョンがビルドに失敗する場合は、ffmpeg3.4AUR をインストールするとうまく行くかもしれません。

参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/

Java アプリケーションで外部リンクを開けない

Java アプリケーションからウェブブラウザなどのリンクを開けない場合、gvfs をインストールしてください。Desktop.Action.BROWSE メソッドがこれを必要とします。[2] を参照。

アプリケーションが次のようなエラーメッセージを表示する場合、この問題が起こっている証拠です: java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform!

QuantumRenderer の初期化でエラー: no suitable pipeline found

考えられる問題と解決策:

  • GTK2 が無い。gtk2 をインストールしてください。
  • OpenJFX が無い。java-openjfxAUR をインストールしてください。

ヒントとテクニック

ノート: このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用できます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。

Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。フォーラムの投稿より、変数を設定するには ~/.bashrc (もしくは全てのユーザーに適用するには /etc/profile.d/jre.sh) に次の行を追加してください:

export JDK_JAVA_OPTIONS="-D<option 1> -D<option 2>..."

例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:

export JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

このような変数は3つ存在しており、以下の表で後に説明されるオプションが優先されます。

JAVA_TOOL_OPTIONS javac や jshell といったアプリケーションとツールに影響します。
JDK_JAVA_OPTIONS アプリケーション (java コマンドで実行されるアプリケーション全て) に影響します。Java 9 が必要。
(コマンドラインオプション) "クラス名" の引数の前で指定される引数は Java オプションです。
_JAVA_OPTIONS 古い方法。アプリケーションとツールに影響します。

フォントレンダリングを改善する

クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: -Dawt.useSystemAAFontSettings=on, -Dswing.aatext=true

詳しい情報は Java 実行環境のフォントを見てください。

コマンドラインの 'Picked up JDK_JAVA_OPTIONS' メッセージを消す

JDK_JAVA_OPTIONS 環境変数を設定すると java (openjdk) から標準エラー出力に次のようなメッセージが書き出されます: 'Picked up JDK_JAVA_OPTIONS=...'。ターミナルにこのメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:

SILENT_JAVA_OPTIONS="$JDK_JAVA_OPTIONS"
unset JDK_JAVA_OPTIONS
alias java='java "$SILENT_JAVA_OPTIONS"'

インタラクティブでないシェル (Java プログラムのランチャースクリプトなど) は、(通常) ~/.bashrc を読み込みません。ですが、export された変数を親プロセスから継承します (~/.bash_profile を読み込むログインシェルからどこかの時点でその変数を継承します)。 そうした場合、ファイルが読み取られるのを防ぐために、~/.bashrc の先頭に文を置いているのが一般的です。そのようにして、変数がデスクトップメニューから起動されたプログラムに渡され、メッセージが邪魔をするインタラクティブシェルの場合は alias が代わりに使用されます (スクリプトでは alias は使用できません)。

GTK のルックアンドフィール

Java プログラムの見た目が酷い場合、swing コンポーネントのデフォルトのルックアンドフィールを設定することができます:

swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です:

swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

GTK3 のサポート

バージョン 9 より前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK バージョン間の非互換性のせいで、GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュする場合があります。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば LibreOffice 5.0 などがこれに該当します。

GTK ルックアンドフィールは GTK バージョン 22.2、そして 3 に対して実行でき、デフォルトは GTK3 です。これは、次のプロパティを設定することで上書きできます:

jdk.gtk.version=2.2

HiDPI

GUI フレームワークによっては、他の方法を使うことで HiDPI#Java アプリケーション を利用可能にできます。

2D のパフォーマンスの向上

OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:

export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'
ノート: このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。
翻訳ステータス: このページは en:Java の翻訳バージョンです。最後の翻訳日は 2024-09-22 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。