Java

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Java and the translation is 100% complete.
Resources

Java は 当初 Sun Microsystems によって開発されたプログラミング言語で、Java で開発されたアプリケーションがさまざまなプラットフォームで実行できるランタイムを採用しています。クロスプロットフォームのアプリケーションを作りたい開発者にとって、Java は人気のある選択肢です。

Javaとは何ですか?

概要

Javaは、Sun Microsystems社が開発したプログラミング言語です。 言語はオブジェクト指向であり、各プラットフォーム用のコードを再コンパイルする必要なく複数のプラットフォーム上で動作するように設計されています。 Javaはネイティブプログラムとしてコンパイルすることができますが、Javaの人気の多くは、自動メモリー管理など他の機能に加え、その携帯性によるものでしょう。 プラットフォーム独立を可能にするために、JavaコンパイラはJavaコードをオペレーティングシステム上で直接動作するのではなく JVM (Java仮想マシン) 上で動作するJavaバイトコードと呼ばれる中間表現にコンパイルします。

Javaバイトコードを実行するためには、JRE (Javaランタイム環境)がインストールされている必要があります。 JREは、とりわけコアライブラリ、プラットフォーム依存の JVM、ブラウザ用のプラグインを提供します。JDK(Java開発キット)は、バイトコードコンパイラやデバッガなどのプログラミングツールを追加します。

JVM の諸言語

Java 仮想マシンは Java プログラミング言語のみによって使用されているわけではありません。複数のプログラミング言語が Java プラットフォームを使用し、JVM 上で動作しています。そうした例には以下を含みます: ClojureApache GroovyKotlinScala

仮想マシンをインストールする

選択肢

Gentoo は多くの Java 実行環境 (JRE) と Java 開発キット (JDK) を提供しています。現時点で使用可能な選択肢は以下の通りです。

ベンダ JDK JRE
The IcedTea Open Java SE (旧 icedtea6-bin) dev-java/icedtea および dev-java/icedtea-bin
OpenJDK dev-java/openjdk および dev-java/openjdk-bin
Oracle's Java dev-java/oracle-jdk-bin dev-java/oracle-jre-bin
The GCJ IcedTea GNU GCC Java (現在は IcedTea-7) dev-java/icedtea sys-devel/gcc USE="gcj"

JRE/JDK をインストールする

プロファイルのデフォルトの JDK をインストールするには、次のコマンドを実行します。

root #emerge --ask virtual/jdk

プロファイルのデフォルトの JRE をインストールするには、次のコマンドを実行します。

root #emerge --ask virtual/jre
警告
Oracle のパッケージを含むいくつかの JDK と JRE は EULA (End-User License Agreement) の承諾を必要とします。そうしたライセンス(dlj-1.1 など)が ACCEPT_LICENSE 変数(/etc/portage/make.conf にあります)に列挙されていないと、その JDK/JRE はインストールすることができないでしょう。受け入れられるライセンスを make.conf に追加する方法の詳細については Portage ハンドブックのライセンス章をお読みください。

制限的なライセンスの問題を回避するため、OpenJDK プロジェクトによるオープンな Java 実装である dev-java/icedtea-bin のインストールを検討してください。

注意
JDK には JRE が含まれていることに留意してください; JDK がemerge されていれば JRE をインストールする必要はありません。

IcedTea GCJ 仮想マシンをインストールする

重要
gcj は非推奨となっており、バージョン7.0以上の GCC では削除されています。Gentoo では GCC 6.0 から利用できなくなっています。この節は非推奨と考えてください。

IcedTea 仮想マシンはソースコードで提供されており、Java バイトコードコンパイラーでコンパイルする必要があります。このブートストラップは GNU Compiler for Java (GCJ) によって実行できます。このコンパイラーは GCC が gcj USE フラグとともにビルドされていれば利用可能です。

GCC をこの USE フラグがセットされている状態で再ビルドすれば dev-java/icedtea パッケージをインストールできます。Portage のバグが原因で、ユーザーは dev-java/gcj-jdkdev-java/ant-core が既に存在していない場合にはまずこれらを明示的にインストールする必要があります。

root #emerge --ask --oneshot dev-java/gcj-jdk dev-java/ant-core
root #emerge --ask dev-java/icedtea:7

fetch-restrict されている仮想マシンをインストールする

いくつかの JDK や JRE は設定の際にいくつかの追加手順が必要です。いつも通りにパッケージを emerge してください。追加手順が必要な場合は ebuild がどこから何をダウンロードすべきかユーザーに指示します。

示されたファイルを /var/cache/distfiles (または DISTDIR の値)にダウンロードしてください。それらのファイルが正しいディレクトリに配置されたら、emerge を再実行します。これでその JRE/JDK のインストールが始まるでしょう。

ヘッドレス JRE をセットアップする

時には Java のすべての機能を持つ完全な JRE が必要ない場合もあるでしょう。サーバーで Java を使う場合、GUI、グラフィック、サウンド、あるいはプリンター関連の機能すら必要ないことがしばしばあります。簡略化された(時にはヘッドレスとも呼ばれる) JRE をインストールするには、選んだ JRE のタイプに応じていくつかの USE フラグを変える必要があります。

ファイル /etc/portage/package.use必要な USE フラグの変更
dev-java/icedtea headless-awt -alsa -cups
dev-java/icedtea-bin headless-awt -alsa -cups
dev-java/oracle-jre-bin headless-awt -alsa -cups

現在の Gentoo プロファイルによってはこれは既にそうなっているかもしれません。通常通り、特定のパッケージに当てはまる USE フラグの設定は emerge を pretend モードで実行することで確認できます:

user $emerge --pretend --verbose virtual/jre

Java 仮想マシンの設定

概要

Gentoo では複数の JDK や JRE を衝突させることなくインストールすることができます。

java-config ツールを root 特権で使って、システム全体のデフォルト java 仮想マシン (VM) を設定できます。またユーザーは java-config を使ってユーザーごとの個人用 VM 設定をカスタムできます。

注意
eselect もシステムやユーザーの VM を変更するために使用できます。eselect java-vm help を見てください。

デフォルトの仮想マシンを設定する

java-config コマンドに --list-available-vms オプションを付けて実行するとシステムにインストールされているすべての JRE と JDK の一覧が出力されます。これは出力の例です:

root #java-config --list-available-vms
The following VMs are available for generation-2:
1)      IcedTea JDK 7.2.6.3 [icedtea-7]
*)      IcedTea JDK 3.0.1 [icedtea-8]
注意
'Build Only' とマークされている VM はセキュリティー脆弱性を抱えていたり、製品寿命の終わり (end of life、EOL) を迎えています。Gentoo ではこれらの VM をシステム VM、ユーザー VM のいずれにも設定しないことをおすすめします。詳細については Build only の VM を見てください。

* は現在アクティブな JVM (システム VM または設定されていればユーザー VM) であることを表します。角括弧 ([]) 内の名前はその特定の VM のハンドルや ID です。ハンドルまたは番号を java-config --set-system-vm に与えることで VM を設定できます。以下ではシステム VM を設定する方法の例を提供します。

ハンドルでシステム VM を設定する (おすすめ):

root #java-config --set-system-vm icedtea-7
Now using icedtea-7 as your generation-2 system JVM

代替の方法: ハンドル番号で VM を選択する:

root #java-config --set-system-vm 3
Now using icedtea-7 as your generation-2 system JVM

一般ユーザーは java-config --set-user-vm を使います。

注意
通常、ユーザーやシステムの VM を変更した時に既存のシェルセッションでプロファイルを source する必要はありません。唯一の例外は、ユーザー VM を初めて設定したりシステム VM に戻したりした後に、JAVA_HOME といった変数がまだ古い位置を指している場合です。

Build only の VM

いくつかの仮想マシンは製品寿命の終わりを迎えていたりセキュリティ脆弱性を抱えているために build-only というフラグが付けられています。Gentoo はこれらの仮想マシンを Gentoo のランチャー(VM の切替えには java-tool スクリプトを実行します)を使用するアプリケーションの実行に自動的には使用しません。しかしいくつかのパッケージのビルドに必要なことがあるため、Gentoo のビルド環境で使用することは可能です。これらの仮想マシンをシステムやユーザーの VM に設定することはいずれも極力避けるべきです。これは、Gentoo のランチャーを使用しないパッケージや /usr/bin/{java,javac,..} といった実行可能ファイルを実行した場合にこうした VM が使用されてしまうためです。

デフォルト CLASSPATH を設定する

警告
この節で説明しているオプションは非推奨とみなされており、おそらく将来削除されるでしょう。理想的には Java プロジェクトやアプリケーションはクラスパスを自ら管理すべきであり、これらのオプションを使用しないことを強くおすすめします。デフォルト CLASSPATH を指定することを選択した場合、いくつかのアプリケーションは予期しない動作をする可能性があります。これはアプリケーションがクラスパスに存在すると想定していないクラスが原因です。

java-config はシステム全体のデフォルト CLASSPATH やユーザー固有のデフォルト CLASSPATH の設定にも使うことができます。

はじめに、システムにインストールされているCLASSPATH に含める可能性がある Java ライブラリを列挙します。これは出力の例です:

root #java-config --list-available-packages
[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
...

この場合も、角括弧 ([]) 内の名前は java-config --set-system-classpath に渡す ID です。これは一例です:

root #java-config --set-system-classpath log4j,xerces-2
注意
カレントディレクトリ (.) はシステムのログインプロファイルに追加されるので、システムクラスパスには含まれません。

ログアウトしてから再度ログインするか、source /etc/profile とタイプして環境を更新します。

ユーザーの場合、java-config --set-user-classpathシェルプロファイルから読み込まれる ~/.gentoo/java-env-classpath ファイルを作成します。

コード ユーザー固有のクラスパスを読み込む
if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
fi

システム全体またはユーザーのデフォルトクラスパスを希望する場合、以下のようなものをシェルのプロファイルに追加します。これはおすすめできません:

root #export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"

Java ブラウザプラグイン

重要
Java プラグインのサポートは JDK 9 で非推奨になりました[1]

Java ブラウザプラグインは以前 eselect java-nsplugin を通じて管理されていました。これはより単純なインストール後そのまま使える仕組みに取って代わられ、現在は削除されています。基本的な使い方は、選択した JVM を nsplugin USE フラグを有功にして emerge するだけです。Oracle のプラグインは amd64x86 でのみ利用可能であることに注意してください。

注意
Chromium ベースのブラウザのバージョン42以降と Firefox のバージョン52以降は、もはや NPAPI ベースのプラグインをサポートしていません[2]。これにより現代のブラウザでは Java プラグインは事実上無効化されています。

JVM の選択、Web Start、multilib も含め、詳細は icedtea-web と共にインストールされる README を見てください。

Java で使用される USE フラグ

USE フラグの設定

USE フラグについての詳細は Gentoo ハンドブックの USE フラグの章を参照してください。

USE フラグ

  • java フラグはさまざまなプログラムの Java サポートを追加します;
  • nsplugin フラグはMozilla ライクなブラウザ (Firefox を含む) 向けのサポートを追加します。Mozilla ライクなブラウザで Java アプレットを表示するために必要です;
  • jce フラグは Java Cryptography Engine のサポートを追加します;

以下の USE フラグは JAVA_PKG_IUSE に含まれます。

  • source フラグはパッケージのソースコードの zip ファイルをインストールします。これは伝統的に IDE で使用中のライブラリーにソースを「アタッチ」するために使われます;
  • Java パッケージでは、 doc フラグは javadoc を使用して API ドキュメンテーションをビルドします。

関連項目

外部資料

さらなる情報はオフラインで入手できます:

  • man java-config
  • java-config --help

この(訳註: 翻訳元の)文書に関する提案や質問については、Gentoo Java team までメールをお寄せください: java@gentoo.org

参照

  1. JDK 9 and the Java Plugin, java.com. 2018年11月30日取得
  2. How do I enable Java in my web browser?, java.com. 2018年11月30日取得

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Joshua Nichols, Karl Trygve Kalleberg,
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.