1

Sun Java と ubuntu でこの非常に奇妙なエラーが発生します。

"java.lang.ClassNotFoundException: com.sun.security.auth.UnixPrincipal"

このクラスは太陽固有のクラスのようです。私は、ubuntu 12.04 で最新の作業バージョンの Sun Java 1.6 を使用しています。私のバージョンの Java が、クラスで実行するために使用されている正しいバージョンであることを確認しました。実際、他のバージョン (openjdk など) が干渉していないことを確認しました。

ここに私の仕様があります:

$ java -version java version "1.6.0_33" Java(TM) SE Runtime Environment (ビルド 1.6.0_33-b03) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.8-b03、混合モード)

$ lsb_release -a 利用可能な LSB モジュールはありません。ディストリビューター ID:
Ubuntu 説明: Ubuntu 12.04 LTS リリース: 12.04 コードネーム:
正確

エラー :

home/vagrant/Development/workspace/xxxxx/build.xml:222: java.lang.NoClassDefFoundError: com/sun/security/auth/UnixPrincipal at org.apache.hadoop.security.UserGroupInformation.(UserGroupInformation.java:246) at org.apache.hadoop.fs.FileSystem$Cache$Key.(FileSystem.java:1436) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1337) at org.apache.hadoop.fs .FileSystem.get(FileSystem.java:244) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:122) ... 原因: java.lang.ClassNotFoundException: com.sun.security.auth。 org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361) の UnixPrincipal org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1311) org.apache.tools.ant.AntClassLoader. java.lang の loadClass(AntClassLoader.java:1070)。ClassLoader.loadClass(ClassLoader.java:247) ... 38 もっと見る

「最初に、これはクラスが私の太陽の設備になかったことを意味しているだけだと思った」

しかし、次の:

unzip -l /usr/lib/jvm/java-6-sun/jre/lib/rt.jar | grep UnixPrincipal

明らかに :

1272 2012-05-09 10:19 com/sun/security/auth/UnixPrincipal.class

そして、System.getProperties() を確認すると、次のことがわかりました。

java.ext.dirs=....usr/lib/jvm/java-6-sun-1.6.0.33/jre/lib/rt.jar.....

したがって、このクラスが、確かに私の Java のランタイム バージョンにある jar にあることを示しています。

したがって、どういうわけか、Java ランタイムはこのクラスをロードできません。なぜだろう?

ちょっとしたメモ:ant 1.8で実行しています。しかし、Ant クラスローダは比較的安定していると私は信じているので、これが何の影響も与えるべきではないと思います。

4

2 に答える 2

1

あなたはおそらくこれを解決したと思いますが、これが私の最近の同じ問題とのもつれです:

Sun Java と gcj の両方がインストールされています。インタラクティブに実行すると、Sun Java が提供され、UnixPrincipalクラスが正しくロードされます。非対話型 ( service myservice start) で実行すると、適切に設定されJAVA_HOMEず、システムは代わりに gcj を使用UnixPrincipalし、ロードに失敗します。JAVA_HOMEサービススクリプトで明示的に設定すると、問題が解決しました。

于 2012-11-20T03:01:53.213 に答える