Gentoo Logo

Gentoo Java アップグレードガイド

Content:

1.  始める前に

アップグレードを始める前に、いくつか知っておくと便利な用語があります。

Generation
  • これは新しいコンセプトです。このアイデアでは、GenerationとはJavaのパッケージをビルドするためのツールとeclassのセットです。 ある時点で、現在のGenerationから新しいGenerationに移行を始めます。この間、両方のGenerationが共存します。 例えば、システムVMであるGeneration X システムVMである Generation X+1が共存することになります。 これにより、新しいGenerationへの移行を行っている間、Generation X とGeneration X+1を使用するパッケージが共存することができます。
Generation 1
  • このGenerationは現存のjava-pkgやjava eclass、java-config-1.xを含みます。
Generation 2
  • これは近年開発されてきた新しいGenerationです。
Generation 1 システムVM
  • これはGeneration 1からeclassを使用するJavaパッケージをemergeするために、使用されるVMです。 これはjava-config-1 --set-system-vm <choice of vm>により設定します。
Generation 2 システムVM
  • Generation 2では、システムVMはrootとユーザVMを設定していないユーザにより使用されます。
Generation 2 ビルドVM
  • Generation 2 はVMに新しいクラスを導入しました。ビルドVMはJavaパッケージのビルドを行うときに使用されます。 デフォルトでは、パッケージは可能な限り低いバージョンのVMを使用するよう試みます。 使用されるベンダーはプラットフォームに依存します。 これらのデフォルトの動作は、/usr/share/java-config-2/config/jdk-defaults.confにより定義されます。 加えて、ビルドVMは/etc/java-config-2/build/jdk.confにより設定することができます。

2.  キーワード

もし、あなたがstable環境の場合(例えば~x86、~ppcまたは~amd64ではなくx86、ppcまたはamd64)、/etc/portage/package.keywordsにいくつか追加する必要があります。

Code Listing 2.1: package.keywords

# Java パッケージのコア
dev-java/ant-core
dev-java/ant-tasks
dev-java/ant
dev-java/java-config
dev-java/java-config-wrapper
dev-java/javatoolkit
# JDK
dev-java/sun-jdk
dev-java/ibm-jdk-bin
dev-java/jrockit-jdk-bin
dev-java/blackdown-jdk
dev-java/kaffe
# JRE
dev-java/sun-jre-bin
dev-java/ibm-jre-bin
dev-java/blackdown-jre
# Virtual
virtual/jdk
virtual/jre
# コンパイラ
dev-java/eclipse-ecj
dev-java/jikes
# ドキュメント
dev-java/java-sdk-docs
# そのほかの、Generation 2にアップグレードされ、
# Generation 1 ではビルドや実行がちゃんとできないもの
dev-java/lucene

Important: 新しいJavaシステムに関するすべてのパッケージを追加することが重要です。 そうしないと、このガイドの後のステップで問題が発生するでしょう。

3.  java-configのアップデート

新しいパッケージである、java-config-wrapperは古いバージョンのjava-configにブロックされるので、まずはこれを削除します。

Code Listing 3.1: 古いjava-configを削除する

# emerge -C java-config

これで新しいバージョンのjava-configをインストールできるでしょう。

Code Listing 3.2: 新しいjava-configをインストールする

# emerge -1 =java-config-1* =java-config-2*

4.  環境をチェックする

我々は新しいスクリプト/usr/bin/java-check-environmentを提供しました。 これはその名が示すように、Java環境をチェックします。 これは次にどのようにすれば、見つかった問題を修正できるかを示します。実行してみましょう。

Code Listing 4.1: 環境をチェックする

# /usr/bin/java-check-environment

Note: このコマンドはrootではないユーザでも実行可能です。rootやシステムはGeneration 1 のVMのみ必要です。 ユーザアカウントで実行した場合は、このスクリプトはそれが欠けていることについてエラーを返すでしょう。 これは普通で、単にその部分は無視してください。

示される内容は以下です。

バーチャルマシンのアップデート

最初のセクションは、古い/etc/env.d/javajava-configファイルをチェックします。 指示は簡単です。ただそれが示すファイルを取り除いてください。その後、それが示すパッケージを再度emergeしてください。

古いユーザー設定を削除する

次のセクションでは、java-check-environmentがGeneration-1の設定をホームディレクトリにあることについて、丁寧に警告してくれます。 これらのファイルはもはや現在の形式ではサポートされません。 もしjava-check-environmentが問題を検出した場合は、アドバイスに従い、以下を実行します。

Note: これは非rootユーザにのみ適応されます。

Code Listing 4.2: 古いユーザー設定を削除する

# java-config-2 --list-available-vms
# java-config-2 --set-user-vm <Choice of VM>

Generation-1のシステムVMが設定されていることを確認する

次に起こりうるエラーはGeneration-1システムVMがない場合です。

Code Listing 4.3: Generation1のVMをセットする

# java-config-1 -L
# java-config-1 -S <system-vm-of-choice-here>

Important: Generation-1のシステムVMは必ずJDK1.4である必要があります。まだない場合はemergeする必要があります。

Note: いかなる場合もGeneration-1はJDK1.4である必要があります。 これはGeneration-1のパッケージをビルドする場合やJava1.5でコンパイルされていないGeneration-2パッケージのために必要です。

もちろん通常通り以下を実行する必要があります。

Code Listing 4.4: 環境変数をアップデートする

# env-update && source /etc/profile

念のため正しい環境になったか確認して下さい。

JDK1.5をGeneration-1 VMとする

次のチェックは、もし、JDK1.5をGeneration-1のシステムVMとしている場合です。 この場合、JDK 1.4を代わりに使うようにすべきです。 この時点までこのガイドに従ってきたなら、上記の手順に従い、単純にGeneration-1の新しいシステムVMとして設定するだけです。

1.5のためにバイトコードをコンパイルしてきた可能性があります。 これは警告"UnsupportedClassVersionError"を引き起こします。これを修正したければ以下を実行してください。

Code Listing 4.5: java-1.5-fixerスクリプトを実行する

まだこのツールを持っていない場合は、java-1.5-fixer をemerge して下さい
# emerge --noreplace javatoolkit portage-utils
java-1.5-fixerの実行
# /usr/bin/java-1.5-fixer

Important: これまでJDK1.5を使用してきた場合、java-1.5-fixerを実行すべきです。 これは散在するJDK1.5バイトコードが存在しないことを確実にします。

Important: java-1.5-fixerはJDK1.5でコンパイルされたパッケージをJDK1.4でリビルドする便利な機能を提供するだけです。 これは完全ではなくすべてのシステムのパッケージを修正できるわけではありません。 失敗した場合、失敗したパッケージをunmergeし、再度失敗したパッケージをemergeする必要があることがほとんどです。

5.  更新されたドキュメント

これらの変更を反映するため、以下のドキュメントが更新されました。

6.  共通の問題や質問

java-check-environmentは何度も同じVMについての問題を出力します。 また、java-config-1 -Lが何も出力しません。 

これはunmaskするキーワードが間違っているために起こっています。 これを修正するには、新しいJavaシステムに関するすべてをunmaskするように設定する必要があります。

具体的には、たいていの場合、システムにインストールしたVMのすべてがunmaskされるよう設定されていないことが原因です。

なぜJDK1.5をGeneration-1のシステムVMとして使用できないのか

JDK1.5をGeneration-1のシステムVMとして用いる事で、最初の段階でpackege.maskとなった原因の、全ての問題に遭遇するでしょう。

しばらくの間何人かの人々は、JDK1.5をシステムVMとして用いることに問題はありませんでしたが、多くのパッケージでは問題を抱えていました。 特に新しいJavaシステムに変更されていない全てのパッケージを動作させるため、JDK1.4は必要です。

アプリケーションが使おうとするJAVA_HOMEはGeneration-1 VMに設定されます

いくつかのアプリケーションはJAVA_HOMEにより、javaを呼び出します。 そのため、JAVA_HOMEはGeneration-1のシステムVMが何なのか設定されています。(すなわち/etc/env.d/20java) これは特定のアプリケーションが新しいeclassを使用するように変更されると問題となるでしょう。

回避方法は、下記に従いJAVA_HOMEを設定してください。

Code Listing 6.1: 環境をチェックする

if [[ -L $HOME/.gentoo/java-config-2/current-user-vm ]]; then
  export JAVA_HOME=$HOME/.gentoo/java-config-2/current-user-vm
elif [[ -L /etc/java-config-2/current-system-vm ]]; then
  export JAVA_HOME=/etc/java-config-2/current-system-vm
fi

これを.bash_profileに含めることもできますが、推奨されていません。 これは新しいシステムが取り除いた余計な物について、環境につながりが残したままになるためです。 例えば、ユーザvmの設定がない場合システムVMが採用されます。 もし後でユーザVMを設定するなら、JAVA_HOMEを正しく取得できるように~/.bash_profileを読み込む必要があります。

Warning: これらをrootユーザのbash_profileに使用しないでください。 もし JDK 1.5のVMをGeneration-2のシステムVMとしていた場合、Generation-1のパッケージを壊すことになります。

よいアプローチはアプリケーションの移行を新しいビルドシステム上で行い、適切に動くことを確実にする方法です。 もし、特定のアプリケーションの実行で問題に悩まされたら、#gentoo-javaのnichojにコンタクトを取っるか、gentoo-javaメーリングリストにメッセージを出してください。



Print

Page updated July 24, 2006

Summary: このガイドはGentoo上のJavaを次世代のJavaへアップグレードする方法を、関連するコンセプトやツールに沿って示します。

Joshua Nichols
Author

Karl Trygve Kalleberg
Author

Josh Saddler
Editor

Takeshi Matsuba
翻訳

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.