我在使用 sun java 和 ubuntu 时遇到了这个非常奇怪的错误。
“java.lang.ClassNotFoundException:com.sun.security.auth.UnixPrincipal”
这个类似乎是一个特定于 sun 的类,我在 ubuntu 12.04 上有一个新的、工作版本的 sun java 1.6。我已经确认我的 java 版本是用于类运行的正确版本,事实上,其他版本(如 openjdk)没有干扰。
这是我的规格:
$ java -version java version "1.6.0_33" Java(TM) SE Runtime Environment (build 1.6.0_33-b03) Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)
$ 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) 在 org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1337) 在 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。 UnixPrincipal 在 org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361) 在 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 个
“首先,我认为这只是意味着该课程不在我的太阳装置中”
但以下内容:
解压-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 .....
因此表明这个类在一个 jar 中,它肯定在我的 java 的运行时版本中!
因此,不知何故,java 运行时无法加载此类。我想知道为什么 ?
一个小提示:我通过 ant 1.8 运行它。但是,我认为这不会产生任何影响,因为我相信 Ant 类加载器是相对稳定的。