「Java」の版間の差分
(同期) |
(OpenJDK 12の情報を追記) |
||
(2人の利用者による、間の19版が非表示) | |||
1行目: | 1行目: | ||
[[Category:プログラミング言語]] |
[[Category:プログラミング言語]] |
||
+ | [[Category:Oracle]] |
||
[[cs:Java]] |
[[cs:Java]] |
||
[[de:Java]] |
[[de:Java]] |
||
9行目: | 10行目: | ||
[[pt:Java]] |
[[pt:Java]] |
||
[[ru:Java]] |
[[ru:Java]] |
||
− | [[ |
+ | [[zh-hans:Java]] |
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Java パッケージガイドライン}} |
{{Related|Java パッケージガイドライン}} |
||
− | {{Related|Java |
+ | {{Related|Java 実行環境のフォント}} |
{{Related articles end}} |
{{Related articles end}} |
||
[[Wikipedia:ja:Java|Wikipedia]] より: |
[[Wikipedia:ja:Java|Wikipedia]] より: |
||
− | :Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン (JVM) で動くバイトコードにコンパイルされます。 |
+ | :Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン ([[Wikipedia:ja:Java仮想マシン|JVM]]) で動くバイトコードにコンパイルされます。 |
− | Arch Linux は公式でオープンソースの [ |
+ | Arch Linux は公式でオープンソースの [https://openjdk.java.net/ OpenJDK] バージョン7・8・10・11・12をサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト {{Ic|archlinux-java}} を使って切り替えることが可能です。他の Java 環境は [[AUR]] からインストールすることができますが公式のサポートはありません。 |
== インストール == |
== インストール == |
||
+ | {{Note| |
||
− | {{Note|JDK をインストールすると自動的に依存パッケージとして JRE がインストールされます。}} |
||
+ | * Arch Linux が公式にサポートしているのは [[#OpenJDK|OpenJDK]] 実装だけです。 |
||
+ | * インストールした後、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}} からリンクを設定します。 |
||
− | {{Note|インストールした後、Java 環境をシェルに認識させる必要があります ({{Ic|$PATH}} 変数)。コマンドラインから {{Ic|/etc/profile}} を source するか、デスクトップ環境ならばログアウトとログインが必要です。}} |
||
+ | さらに Java 環境セットによる全ての実行ファイルのために {{Ic|/usr/bin}} にリンクを作成・更新します。{{Ic|/etc/profile.d/jdk.sh}} ファイルは現在どのパッケージにも入っていません。 |
||
− | 依存パッケージとして自動的にインストールされる {{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}} からリンクを設定します。さらに Java 環境セットによる全ての実行ファイルのために {{Ic|/usr/bin}} にリンクを作成・更新します。 |
||
+ | === OpenJDK === |
||
− | {{Warning|ファイル {{Ic|/etc/profile.d/jdk.sh}} は現在どのパッケージにも入っていません。}} |
||
+ | [[Wikipedia:ja:OpenJDK|OpenJDK]] は Java Platform, Standard Edition (Java SE) のオープンソース実装です。 |
||
− | ブラウザで Java を使うには ([[Wikipedia:ja:Javaアプレット|Java アプレット]]や [[Wikipedia:ja:Java Web Start|Java Web Start]])、{{Pkg|icedtea-web}} をインストールしてください。詳しくは [[ブラウザプラグイン#Java (IcedTea)]] を見て下さい。 |
||
+ | ;ヘッドレス JRE: 最小限の Java 実行環境 - GUI のない Java プログラムを実行するのに必要。 |
||
− | [[公式リポジトリ]]から以下のパッケージがインストールできます: |
||
+ | ;フル JRE: 完全な Java 実行環境 - Java の GUI プログラムを実行するのに必要。ヘッドレス JRE に依存。 |
||
− | |||
+ | ;JDK:[[Wikipedia:ja:Java Development Kit|Java Development Kit]] - Java で開発するのに必要。フル JRE に依存。 |
||
− | === OpenJDK 7 === |
||
{| class="wikitable" |
{| class="wikitable" |
||
+ | ! バージョン !! ヘッドレス JRE !! フル JRE !! JDK !! ドキュメント !! ソース |
||
− | ! パッケージ名 !! 中身 |
||
|- |
|- |
||
+ | | [https://openjdk.java.net/projects/jdk/12/ OpenJDK 12] || {{Pkg|jre-openjdk-headless}} || {{Pkg|jre-openjdk}} || {{Pkg|jdk-openjdk}} || {{Pkg|openjdk-doc}} || {{Pkg|openjdk-src}} |
||
− | |{{Pkg|jre7-openjdk-headless}} || Java 実行環境 (''JRE'') グラフィカルツールなし - バージョン 7 |
||
|- |
|- |
||
+ | | [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}} |
||
− | |{{Pkg|jre7-openjdk}} || 完全な Java 実行環境 (''JRE'') - バージョン 7 |
||
|- |
|- |
||
+ | | [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}} |
||
− | |{{Pkg|jdk7-openjdk}} || Java 開発キット (''JDK'') - バージョン 7 |
||
|- |
|- |
||
+ | | [https://openjdk.java.net/projects/jdk8/ OpenJDK 8] || {{Pkg|jre8-openjdk-headless}} || {{Pkg|jre8-openjdk}} || {{Pkg|jdk8-openjdk}} || {{Pkg|openjdk8-doc}} || {{Pkg|openjdk8-src}} |
||
− | |{{Pkg|openjdk7-doc}} || OpenJDK javadoc - バージョン 7 |
||
|- |
|- |
||
+ | | [https://openjdk.java.net/projects/jdk7/ OpenJDK 7] || {{Pkg|jre7-openjdk-headless}} || {{Pkg|jre7-openjdk}} || {{Pkg|jdk7-openjdk}} || {{Pkg|openjdk7-doc}} || {{Pkg|openjdk7-src}} |
||
− | |{{Pkg|openjdk7-src}} || OpenJDK ソース - バージョン 7 |
||
|} |
|} |
||
+ | {{App|IcedTea-Web|Java Web Start と旧式の Java ブラウザプラグイン。|https://icedtea.classpath.org/wiki/IcedTea-Web|{{Pkg|icedtea-web}}}} |
||
− | === OpenJDK 8 === |
||
+ | {{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 EA|最新開発版の OpenJDK アーリーアクセスビルド。|https://jdk.java.net|{{AUR|java-openjdk-ea-bin}}}} |
||
+ | {{App|OpenJFX EA|最新開発版の OpenJFX アーリーアクセスビルド。|https://openjfx.io/|{{AUR|java-openjfx-ea-bin}}}} |
||
+ | === 他の実装 === |
||
− | {| class="wikitable" |
||
− | ! パッケージ名 !! 中身 |
||
− | |- |
||
− | |{{Pkg|jre8-openjdk-headless}} || Java 実行環境 (''JRE'') グラフィカルツールなし - バージョン 8 |
||
− | |- |
||
− | |{{Pkg|jre8-openjdk}} || 完全な Java 実行環境 (''JRE'') - バージョン 8 |
||
− | |- |
||
− | |{{Pkg|jdk8-openjdk}} || Java 開発キット (''JDK'') - バージョン 8 |
||
− | |- |
||
− | |{{Pkg|openjdk8-doc}} || OpenJDK javadoc - バージョン 8 |
||
− | |- |
||
− | |{{Pkg|openjdk8-src}} || OpenJDK ソース - バージョン 8 |
||
− | |- |
||
− | |} |
||
+ | {{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}}}} |
||
− | === OpenJFX === |
||
+ | {{App|OpenJ9|IBM から Eclipse に継承された JRE の実装。|https://www.eclipse.org/openj9/|{{AUR|jdk9-openj9-bin}} {{AUR|jdk8-openj9-bin}}}} |
||
+ | {{App|IBM J9|IBM による第7・8版 JRE の実装。|https://developer.ibm.com/javasdk/|{{AUR|jdk8-j9-bin}} {{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}}}} |
||
+ | {{Note|32ビット版の Java SE はパッケージの前に {{ic|bin32-}} が付きます。例: {{AUR|bin32-jre}} や {{AUR|bin32-jdk}}。これらのパッケージは後ろに {{ic|32}} が付く {{Pkg|java-runtime-common}} として機能する {{AUR|java32-runtime-common}} を使用します。例: {{ic|java32}}。}} |
||
− | JavaFX も公式リポジトリからインストールすることができます。OpenJDK 8 が必要です。 |
||
+ | === 開発ツール === |
||
− | {| class="wikitable" |
||
+ | |||
− | ! パッケージ名 !! 中身 |
||
+ | 統合開発環境については[[アプリケーション一覧/ユーティリティ#統合開発環境]]や ''Java IDE'' サブセクションを見てください。 |
||
− | |- |
||
+ | |||
− | |{{Pkg|java-openjfx}} || Java OpenJFX 8 クライアントアプリケーションプラットフォーム (JavaFX のオープンソース実装) |
||
+ | {{AUR|proguard}} などの難読化ツールを使うことでリバースエンジニアリングを行いにくくすることができます。 |
||
− | |- |
||
− | |{{Pkg|java-openjfx-doc}} || OpenJFX javadoc |
||
− | |- |
||
− | |{{Pkg|java-openjfx-src}} || OpenJFX ソース |
||
− | |- |
||
− | |} |
||
+ | ==== 逆コンパイラ ==== |
||
− | == パッケージの out-of-date == |
||
− | Arch Linux のパッケージのリリースにはパッケージがベースとしているプロプライエタリのバージョンへの言及が含まれていることがありますが、オープンソースプロジェクトには独自のバージョン規則があります: |
||
+ | * {{App|Bytecode Viewer|Java リバースエンジニアリングスイート。逆コンパイラ・エディタ・デバッガが含まれています。|https://bytecodeviewer.com|{{AUR|bytecode-viewer}}}} |
||
− | *{{Pkg|jre7-openjdk}}, {{Pkg|jdk7-openjdk}}, {{Pkg|jre7-openjdk-headless}} は [http://icedtea.wildebeest.org/download/source ''IcedTea'' のバージョン] (例: {{ic|2.4.3}}) にあわせて out-of-date になります。Oracle のバージョン (例: {{ic|7.u45_2.4.3-1}} の {{ic|u45}}) は関係ありません。 |
||
+ | * {{App|CFR|Java 9, 10 以降の新しい機能をサポートする Java 逆コンパイラ。|https://www.benf.org/other/cfr/|{{AUR|cfr}}}} |
||
− | *{{Pkg|icedtea-web}} は [http://icedtea.wildebeest.org/download/source ''IcedTea Web'' のバージョン] (例: {{ic|1.4.1}}) にあわせて out-of-date になります。''IcedTea'' のバージョンは関係ありません。 |
||
+ | * {{App|Fernflower|[[IntelliJ IDEA]] の一部として開発されている Java の解析逆コンパイラ。|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}} |
||
+ | * {{App|[[Wikipedia:JAD (software)|JAD]]|メンテナンスが止まっている Java 逆コンパイラ。|https://varaneckas.com/jad|{{Pkg|jad}}}} |
||
+ | * {{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|Procyon decompiler|ILSpy と Mono.Cecil の影響を受けた実験的な Java 逆コンパイラ。|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{AUR|procyon-decompiler}}, GUI: {{AUR|luyten}}}} |
||
== JVM の切り替え == |
== JVM の切り替え == |
||
95行目: | 91行目: | ||
COMMAND: |
COMMAND: |
||
+ | status インストールされている Java 環境と有効になっている環境を表示 |
||
− | status List installed Java environments and enabled one |
||
+ | get デフォルトに設定されている Java 環境を返す |
||
− | get Return the short name of the Java environment set as default |
||
− | set <JAVA_ENV> |
+ | set <JAVA_ENV> <JAVA_ENV> をデフォルトに設定 |
− | unset |
+ | unset デフォルトの Java 環境の設定を解除 |
+ | fix 不正な Java 環境の設定を修正 |
||
− | fix Fix an invalid/broken default Java environment configuration |
||
=== インストールされている Java 互換環境を表示 === |
=== インストールされている Java 互換環境を表示 === |
||
135行目: | 131行目: | ||
=== デフォルトの Java 環境を修正 === |
=== デフォルトの Java 環境を修正 === |
||
− | 存在しない Java 環境のリンクが設定されている場合、{{Ic|archlinux-java fix}} コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (公式でサポートされているパッケージ |
+ | 存在しない Java 環境のリンクが設定されている場合、{{Ic|archlinux-java fix}} コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (公式でサポートされているパッケージ "OpenJDK 8" がまず初めに使われます。他のインストール環境はその後です): |
# archlinux-java fix |
# archlinux-java fix |
||
146行目: | 142行目: | ||
export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH |
export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH |
||
− | exec /path/to/application |
+ | exec /path/to/application "$@" |
== {{Ic|archlinux-java}} をサポートするのに必要なパッケージの条件 == |
== {{Ic|archlinux-java}} をサポートするのに必要なパッケージの条件 == |
||
+ | |||
+ | {{Note|以下の情報は32ビットの Java パッケージである {{ic|archlinux32-java}} にも同じく当てはまります。パッケージや実行ファイルの名前には {{ic|32}} を含めてください。}} |
||
+ | |||
このセクションは [[AUR]] に新しい JVM のパッケージを投稿し、Arch Linux の JVM の扱いかたにあわせて {{Ic|archlinux-java}} を使用したいパッケージ作成者を対象にしています。パッケージは以下の条件を満たす必要があります: |
このセクションは [[AUR]] に新しい JVM のパッケージを投稿し、Arch Linux の JVM の扱いかたにあわせて {{Ic|archlinux-java}} を使用したいパッケージ作成者を対象にしています。パッケージは以下の条件を満たす必要があります: |
||
162行目: | 161行目: | ||
* '''特定の Java ベンダー'''が必要なパッケージは適当なパッケージを依存パッケージとして宣言してください |
* '''特定の Java ベンダー'''が必要なパッケージは適当なパッケージを依存パッケージとして宣言してください |
||
* OpenJDK パッケージは {{Ic|1=provides="java-runtime-openjdk=${pkgver}"}} などを宣言しています。このためサードパーティのパッケージはバージョンを指定せずに OpenJDK を依存パッケージとして宣言することができます |
* OpenJDK パッケージは {{Ic|1=provides="java-runtime-openjdk=${pkgver}"}} などを宣言しています。このためサードパーティのパッケージはバージョンを指定せずに OpenJDK を依存パッケージとして宣言することができます |
||
− | |||
− | == AUR のサポートされていない JVM == |
||
− | |||
− | {{Warning|[[AUR]] のパッケージは {{Ic|archlinux-java}} をサポートしていたりしていなかったりします。}} |
||
− | |||
− | === Java SE === |
||
− | Oracle による JRE と JDK の実装は [[Arch User Repository|AUR]] から利用できます: {{AUR|jre}}, {{AUR|server-jre}}, {{AUR|jdk}}。 |
||
− | |||
− | ==== Java SE 9 ==== |
||
− | |||
− | Java 9 の開発版は {{AUR|jre-devel}} と {{AUR|jdk-devel}} に含まれています。 |
||
− | |||
− | ==== Java SE 6/7 ==== |
||
− | [[Arch User Repository|AUR]] には旧バージョンである {{AUR|jre6}}/{{AUR|jre6-compat}}/{{AUR|jre7}} と {{AUR|jdk6}}/{{AUR|jdk6-compat}}/{{AUR|jdk7}} が含まれています。 |
||
− | |||
− | ==== 32ビット版 Java SE ==== |
||
− | |||
− | 上記のパッケージには全て32ビット版が存在し {{ic|bin32-}} が前に付きます。例: {{AUR|bin32-jre}} や {{AUR|bin32-jdk}}。 |
||
− | |||
− | {{Note|32ビット版のパッケージは {{ic|archlinux-java32}} ({{AUR|java32-runtime-common}}) を使用します。{{ic|archlinux-java}} ({{Pkg|java-runtime-common}}) とは別個ですが機能は同じで、Java のリンクに {{ic|32}} を付与します。例: {{ic|java32}}。}} |
||
− | |||
− | === Oracle JRockit === |
||
− | [http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html JRockit] は Oracle による Java の JIT バージョンであり、[[Arch User Repository|AUR]] の {{AUR|jrockit}} からインストールできます。 |
||
− | |||
− | === VMkit === |
||
− | [http://vmkit.llvm.org/index.html VMkit] は JIT 仮想マシンのための LLVM ベースのフレームワークです。J3 は VMkit を動作させる JVM です。ウェブページはここにあります: [http://vmkit.llvm.org/get_started.html vmkit]。J3 は GNU classpath ライブラリに依存していますが、Apache のクラスパスライブラリを使うことも可能です。 |
||
− | |||
− | === Parrot VM === |
||
− | [http://www.parrot.org/ Parrot] は VM であり、異なる2つの方法によって実験的に [http://trac.parrot.org/parrot/wiki/Languages Java をサポート] しています: [http://code.google.com/p/parrot-jvm/ Java VM バイトコード翻訳機] もしくは [https://github.com/chrisdolan/perk Parrot VM のための Java コンパイラ]。{{Pkg|parrot}} は[[公式リポジトリ]]からインストールでき、[[Arch User Repository|AUR]] には {{AUR|parrot-git}} があります。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
=== MySQL === |
=== MySQL === |
||
− | JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。[[ |
+ | JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。[[MariaDB#リモートアクセスを有効にする|MariaDB の記事]]の指示に従って下さい。 |
=== 他のウィンドウマネージャになりすます === |
=== 他のウィンドウマネージャになりすます === |
||
− | [ |
+ | [https://tools.suckless.org/x/wmname suckless.org] の {{pkg|wmname}} を使うことで JVM に他のウィンドウマネージャを動かしていると信じこませることが可能です。これによって [[Awesome]], [[Dwm]], [[Ratpoison]] などのウィンドウマネージャで起こる Java の GUI のレンダリング問題が解決する可能性があります。 |
$ wmname LG3D |
$ wmname LG3D |
||
206行目: | 176行目: | ||
=== フォントが読みにくい === |
=== フォントが読みにくい === |
||
− | 下の [[#フォントレンダリングを改善する]] で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。 |
+ | 下の [[#フォントレンダリングを改善する]] で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。{{AUR|ttf-ms-fonts}} パッケージをインストールしてください。 |
=== 特定のアプリケーションでテキストが表示されない === |
=== 特定のアプリケーションでテキストが表示されない === |
||
− | 特定のアプリケーションでテキストが完全に表示されない場合は {{Bug|40871}} で提案されているように [[# |
+ | 特定のアプリケーションでテキストが完全に表示されない場合は {{Bug|40871}} で提案されているように [[#ヒントとテクニック]] のオプションを使うと直るかもしれません。 |
=== Too many levels of symbolic links === |
=== Too many levels of symbolic links === |
||
220行目: | 190行目: | ||
[[#デフォルトの Java 環境を修正|デフォルトの Java 環境を修正]]することで問題が解決するはずです。[https://bbs.archlinux.org/viewtopic.php?pid=1453803] も見て下さい。 |
[[#デフォルトの Java 環境を修正|デフォルトの Java 環境を修正]]することで問題が解決するはずです。[https://bbs.archlinux.org/viewtopic.php?pid=1453803] も見て下さい。 |
||
+ | === JavaFX アプリケーションのデバッグ時にシステムがフリーズする === |
||
− | == Tips and tricks == |
||
+ | |||
+ | JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション {{Ic|1=-Dsun.awt.disablegrab=true}} を使ってみてください。 |
||
+ | |||
+ | 詳しくは https://bugs.java.com/view_bug.do?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 のリポジトリに含まれている新しい {{pkg|ffmpeg}} と互換性がないためです。 |
||
+ | |||
+ | 解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。 |
||
+ | |||
+ | 参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/ |
||
+ | |||
+ | === Java アプリケーションで外部リンクを開けない === |
||
+ | Java アプリケーションからウェブブラウザなどのリンクを開けない場合、{{Pkg|gvfs}} をインストールしてください。Desktop.Action.BROWSE メソッドが必要とします。[https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2] を参照。 |
||
+ | |||
+ | == ヒントとテクニック == |
||
{{Note|このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用されます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。}} |
{{Note|このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用されます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。}} |
||
234行目: | 231行目: | ||
クローズドソースとオープンソースの 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 _JAVA_OPTIONS' メッセージを消す === |
||
249行目: | 246行目: | ||
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です: {{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}。 |
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です: {{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}。 |
||
+ | ==== GTK3 のサポート ==== |
||
− | {{Note|Java で強制的に GTK を使うように設定するとアプリケーションが動作しなくなることがあります。最新の JRE/JDK (8u60 現在) は GTK2 にリンクしていますが、GTK3 を使い始めたデスクトップ環境も少なくありません。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。}} |
||
+ | |||
+ | バージョン 9 以前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。 |
||
+ | |||
+ | [https://openjdk.java.net/jeps/283 Java 9] から、GTK のルックアンドフィールは GTK のバージョン {{Ic|2}}, {{Ic|2.2}}, {{Ic|3}} で動作するようになっており、デフォルトは GTK2 になっています。以下のプロパティを設定することで上書きすることができます: |
||
+ | |||
+ | jdk.gtk.version=3 |
||
+ | |||
+ | === 2D のパフォーマンスの向上 === |
||
+ | |||
+ | OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します: |
||
+ | |||
+ | export _JAVA_OPTIONS='-Dsun.java2d.opengl=true' |
||
+ | |||
+ | {{Note|このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。}} |
||
=== リペアレントしないウィンドウマネージャ === |
=== リペアレントしないウィンドウマネージャ === |
||
256行目: | 267行目: | ||
export _JAVA_AWT_WM_NONREPARENTING=1 |
export _JAVA_AWT_WM_NONREPARENTING=1 |
||
+ | |||
+ | 上記の設定を行わないと Java プログラムが正しく描画されないことがあります。 |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [https://math.hws.edu/javanotes/ Introduction to Programming Using Java] |
2019年6月29日 (土) 16:17時点における版
Wikipedia より:
- Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン (JVM) で動くバイトコードにコンパイルされます。
Arch Linux は公式でオープンソースの OpenJDK バージョン7・8・10・11・12をサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト archlinux-java
を使って切り替えることが可能です。他の Java 環境は AUR からインストールすることができますが公式のサポートはありません。
インストール
依存パッケージとして自動的にインストールされる java-runtime-common と java-environment-common という名前の2つの共通パッケージには環境ファイル /etc/profile.d/jre.sh
が入っています。このファイルには全ての JVM 環境で共通の変数が含まれています。また、java-runtime-common パッケージにはデフォルトの Java 環境を表示したり変更することができるユーティリティスクリプト archlinux-java
も付いています。このスクリプトは衝突しないように /usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
にインストールされた Java 環境や Java ランタイムに /usr/lib/jvm/default
や /usr/lib/jvm/default-runtime
からリンクを設定します。
さらに Java 環境セットによる全ての実行ファイルのために /usr/bin
にリンクを作成・更新します。/etc/profile.d/jdk.sh
ファイルは現在どのパッケージにも入っていません。
OpenJDK
OpenJDK は Java Platform, Standard Edition (Java SE) のオープンソース実装です。
- ヘッドレス JRE
- 最小限の Java 実行環境 - GUI のない Java プログラムを実行するのに必要。
- フル JRE
- 完全な Java 実行環境 - Java の GUI プログラムを実行するのに必要。ヘッドレス JRE に依存。
- JDK
- Java Development Kit - Java で開発するのに必要。フル JRE に依存。
IcedTea-Web — Java Web Start と旧式の Java ブラウザプラグイン。
OpenJFX 8 — JavaFX のオープンソース実装。Oracle による JRE と JDK の実装である Java SE を利用している場合はパッケージをインストールする必要はありません [1]。オープンソースの Java 実装 (OpenJDK プロジェクト) を使っているユーザーのためのパッケージです。
OpenJFX — 最新の OpenJFX コミュニティビルド。
OpenJDK EA — 最新開発版の OpenJDK アーリーアクセスビルド。
OpenJFX EA — 最新開発版の OpenJFX アーリーアクセスビルド。
他の実装
Java SE — Oracle による JRE と JDK の実装。
- https://www.oracle.com/technetwork/java/javase/downloads/index.html || jreAUR jre9AUR jre8AUR jre7AUR jre6AUR jdkAUR jdk9AUR jdk8AUR jdk7AUR jdk6AUR jdk5AUR jdk-develAUR
OpenJ9 — IBM から Eclipse に継承された JRE の実装。
IBM J9 — IBM による第7・8版 JRE の実装。
Parrot VM — Parrot は VM であり、異なる2つの方法によって実験的に Java をサポート しています: Java VM バイトコード翻訳機 もしくは Parrot VM のための Java コンパイラ。
- http://www.parrot.org/ || parrotAUR
開発ツール
統合開発環境についてはアプリケーション一覧/ユーティリティ#統合開発環境や Java IDE サブセクションを見てください。
proguardAUR などの難読化ツールを使うことでリバースエンジニアリングを行いにくくすることができます。
逆コンパイラ
- Bytecode Viewer — Java リバースエンジニアリングスイート。逆コンパイラ・エディタ・デバッガが含まれています。
- CFR — Java 9, 10 以降の新しい機能をサポートする Java 逆コンパイラ。
- Fernflower — IntelliJ IDEA の一部として開発されている Java の解析逆コンパイラ。
- https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine || fernflower-gitAUR
- JAD — メンテナンスが止まっている Java 逆コンパイラ。
- JD-Core-java — Java Decompiler の薄いラッパー。
- Krakatau — Java 逆コンパイラ・アセンブラ・逆アセンブラ。
- Procyon decompiler — ILSpy と Mono.Cecil の影響を受けた実験的な Java 逆コンパイラ。
- https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler || procyon-decompilerAUR, GUI: luytenAUR
JVM の切り替え
ヘルパースクリプト archlinux-java
を使って切り替えることができます:
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-7-openjdk (default) java-8-openjdk/jre
(default) は java-7-openjdk
がデフォルトに設定されていることを示しています。java
やその他のバイナリの呼び出しはこの Java インストールに基づきます。また、上の出力では OpenJDK 8 の JRE しかインストールされていないのに注意してください。
デフォルトの Java 環境を変更
# archlinux-java set <JAVA_ENV_NAME>
例:
# archlinux-java set java-8-openjdk/jre
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 を使ってアプリケーションを起動したい場合 (例えば jre7 と jre8 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトのバージョンが jre7 で、jre8 を使いたい場合:
#!/bin/sh export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH exec /path/to/application "$@"
archlinux-java
をサポートするのに必要なパッケージの条件
このセクションは AUR に新しい JVM のパッケージを投稿し、Arch Linux の JVM の扱いかたにあわせて archlinux-java
を使用したいパッケージ作成者を対象にしています。パッケージは以下の条件を満たす必要があります:
- 全てのファイルは
/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
以下に配置 - 該当するパッケージに java-runtime-common や java-environment-common に入っているリンクの実行可能ファイルがあること
- リンクが java-runtime-common や java-environment-common にない場合にのみ、
/usr/bin
から実行可能ファイルへのリンク - man ページの末尾に
-${VENDOR_NAME}${JAVA_MAJOR_VERSION}
をつけて衝突しないようにする (jre8-openjdk のファイルリストを見れば-openjdk8
を付ける man ページがわかります) - 他の JDK や
java-runtime
,java-runtime-headless
,java-environment
の conflicts や replaces は宣言しない - install 関数で
archlinux-java
スクリプトを使って他の Java 環境が設定されていない場合に Java 環境をデフォルトに設定 (強制的にデフォルトとしてインストールしてはいけません)。サンプルは公式にサポートされている Java 環境のパッケージのソースを参照。
他の注意事項:
- Java 環境が必要なパッケージでベンダーを問わない場合は通常通りに
java-runtime
,java-runtime-headless
またはjava-environment
を依存パッケージとして宣言してください - 特定の Java ベンダーが必要なパッケージは適当なパッケージを依存パッケージとして宣言してください
- OpenJDK パッケージは
provides="java-runtime-openjdk=${pkgver}"
などを宣言しています。このためサードパーティのパッケージはバージョンを指定せずに OpenJDK を依存パッケージとして宣言することができます
トラブルシューティング
MySQL
JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。MariaDB の記事の指示に従って下さい。
他のウィンドウマネージャになりすます
suckless.org の wmname を使うことで JVM に他のウィンドウマネージャを動かしていると信じこませることが可能です。これによって Awesome, Dwm, Ratpoison などのウィンドウマネージャで起こる Java の GUI のレンダリング問題が解決する可能性があります。
$ wmname LG3D
(wmname コマンドを実行した後、アプリケーションを再起動してください。)
これが機能するのは JVM にはハードコードされた既知の、ノンリペアレントウィンドウマネージャのリストが含まれているためです。最大の皮肉として、Sun によって Java で書かれたノンリペアレントウィンドウマネージャである LG3D
になりすますことを好むユーザーもいます。
フォントが読みにくい
下の #フォントレンダリングを改善する で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。ttf-ms-fontsAUR パッケージをインストールしてください。
特定のアプリケーションでテキストが表示されない
特定のアプリケーションでテキストが完全に表示されない場合は FS#40871 で提案されているように #ヒントとテクニック のオプションを使うと直るかもしれません。
Too many levels of symbolic links
以下のようなエラーが表示される場合:
/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 環境を修正することで問題が解決するはずです。[2] も見て下さい。
JavaFX アプリケーションのデバッグ時にシステムがフリーズする
JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション -Dsun.awt.disablegrab=true
を使ってみてください。
詳しくは https://bugs.java.com/view_bug.do?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 をインストールすることです。
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/
Java アプリケーションで外部リンクを開けない
Java アプリケーションからウェブブラウザなどのリンクを開けない場合、gvfs をインストールしてください。Desktop.Action.BROWSE メソッドが必要とします。[3] を参照。
ヒントとテクニック
Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。フォーラムの投稿より、変数を設定するには ~/.bashrc
(もしくは全てのユーザーに適用するには /etc/profile.d/jre.sh
) に次の行を追加してください:
export _JAVA_OPTIONS="-D<option 1> -D<option 2>..."
例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
フォントレンダリングを改善する
クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: -Dawt.useSystemAAFontSettings=on
, -Dswing.aatext=true
詳しい情報は Java 実行環境のフォントを見てください。
コマンドラインの 'Picked up _JAVA_OPTIONS' メッセージを消す
_JAVA_OPTIONS
環境変数を設定すると java (openjdk) から標準出力に次のようなメッセージが書き出されます: 'Picked up _JAVA_OPTIONS=...'。ターミナルにメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:
_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS" unset _JAVA_OPTIONS alias java='java "$_SILENT_JAVA_OPTIONS"'
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 を使用します。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。
Java 9 から、GTK のルックアンドフィールは GTK のバージョン 2
, 2.2
, 3
で動作するようになっており、デフォルトは GTK2 になっています。以下のプロパティを設定することで上書きすることができます:
jdk.gtk.version=3
2D のパフォーマンスの向上
OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:
export _JAVA_OPTIONS='-Dsun.java2d.opengl=true'
リペアレントしないウィンドウマネージャ
リペアレントしないウィンドウマネージャを使用する場合は .xinitrc
で以下の環境変数を設定してください:
export _JAVA_AWT_WM_NONREPARENTING=1
上記の設定を行わないと Java プログラムが正しく描画されないことがあります。