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 クラスローダは比較的安定していると私は信じているので、これが何の影響も与えるべきではないと思います。