Java 2 SDK 開発ガイド (Solaris 編)

ツールの互換性の問題

  1. Java 2 SDK Solaris 版では、javac -O オプションは JDK 1.1 とは異なる意味を持ち、生成されたコードに対して性能面で異なる影響を与えることがあります。Java 2 SDK Solaris 版では、javac -O は、高速のコードを生成するようコンパイラに指示します。クラスにまたがってメソッドをインライン化したり、暗黙的に -depend をオンにしたり、暗黙的に -g をオフにしたりすることはありません。暗黙的に -depend をオンにすることはないため、-depend をオンにする必要がある場合は、コマンド行に -depend を追加する必要があります。

  2. Java 2 SDK Solaris 版のクラスファイルを作成する場合は、JDK 1.1.4 以降に発表されたバージョンの javac コンパイラだけを使用してください。JDK 1.1 版の javac を使用すると、不正な内部クラス属性が生成されることがあります (Java 2 SDK Solaris 版の javac は正しい属性を生成します)。JDK 1.1.4 およびそれ以前の javac コンパイラは、正しい書式を検出したときにクラッシュする可能性があります。JDK 1.1.5 以降、javac は、旧版と新版両方の正しい属性に対応しています。これは、コンパイル時だけの問題です。Java 2 SDK Solaris 版のコンパイラは、古い VM で動作するクラスファイルを生成します。

  3. Java 2 SDK Solaris 版では、javakey ツールの代わりに keytoolPolicyTooljarsigner ツールが追加されています。これらの新しいツールについては、http://java.sun.com/products/jdk/1.2/ja/docs/ja/guide/security/index.html で、Java 2 SDK Solaris 版のセキュリティに関するドキュメントを参照してください。

  4. JDK 1.1 では、javap -verify は、クラスファイルの部分検査を行なっていました。Java 2 SDK Solaris 版には、このオプションはありません。検査のほんの一部を実行するだけであるため、誤解を生みやすいオプションでした。

  5. 1.1.4 より前の Java インタプリタでは、java c コマンドを使用して、/a/b/c.class 位置のクラスファイルを /a/b ディレクトリの中から呼び出すことができました (c クラスが a.b.* パッケージに含まれている場合も可能)。この場合、JDK 1.1.4 および Java 2 SDK Solaris 版では、完全修飾クラス名を指定する必要があります。たとえば、/a/b/c.class 位置にある a.b.c を呼び出すには、/a ディレクトリの親ディレクトリから java a.b.c コマンドを発行します。

  6. JDK 1.1 ベースのリリースにバグがあるため、JDK 1.1 の javakey ツールを使って署名されたコードが Java 2 SDK Solaris 版では署名されていないものとみなされます。また、Java 2 SDK Solaris 版を使って署名されたコードが JDK 1.1 ベースのリリースでは署名されていないものとみなされます。

  7. Java 2 SDK Solaris 版より前の javac では、矛盾するあるいは冗長なコマンド行オプションの組み合わせが見過ごされていました。たとえば、-classpath を複数回指定することができ、最後に指定されたオプションだけが有効になっていました。Java 2 SDK Solaris 版では、こうした動作はしません。

  8. Java 2 SDK Solaris 版より前の Java インタプリタの -classpath オプションは、VM がシステムクラスをロードするときに使用する検索パスを設定していました。VM は、このパスに合わせて java.class.path プロパティを設定します。一般的に、アプリケーションクラスは、対応するクラスローダがなくても、システムクラスパスから直接呼び出されていました。

    インストールされている拡張機能と新しいセキュリティモデルの両方を活用するため、Java 2 SDK Solaris 版では、アプリケーションクラスローダからアプリケーションを起動します。このため、-classpath オプションは、アプリケーションクラスローダがクラスと資源をロードするときに使用するクラスパスを設定します。同様に、java.class.path プロパティには、このパスが反映されます。VM が内部的に使用するシステムクラスパスは、新しい -Xbootclasspath オプションを使用して無効にすることができます。ほとんどの場合、システムクラスパスを変更する必要はありません。

    通常、大部分のアプリケーションはこの変更の影響を受けません。ただし、java.class.path プロパティには、システムクラスをロードするときに使用されるディレクトリや JAR ファイルが含まれないことを忘れないでください。詳細は、新しい sun.boot.class.path プロパティを参照してください。独自のセキュリティマネージャをインストールするアプリケーションはこれによって悪影響を受けるかもしれません。このようなアプリケーションは Java 2 SDK Solaris 版用に書き換える必要がありますが、当面は、下位互換性のために -Xbootchasspath スイッチが提供されます。

  9. Java 2 SDK Solaris 版の javadoc ツールは、パッケージレベルの API 出力に対して次の形式のファイル名を生成します。

    package-<package name>.html

    以前は、次の形式のファイル名が生成されていました。

    Package-<package name>.html

    たとえば、java.io パッケージに対するデフォルトのパッケージレベルの出力のファイル名は次のようになっていました。

    Package-java.io.html

    Java 2 SDK Solaris 版以降、このファイル名は次のようになります。

    package-java.io.html

  10. NMI をサポートしなくなったため、Java 2 SDK Solaris 版の javah は異なるものになっています。-nmi フラグはありません。詳細は、javahを参照してください。