1

我在使用 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 类加载器是相对稳定的。

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 回答
0

我在尝试使用ant运行 Solr 时遇到了这个问题。虽然我已经JAVA_HOME设置了 Oracle JDK8,但我相信ant可能已经在我的 Ubuntu 15.10 计算机上找到了 openjdk 安装。

问题的解决方案是fork="true"在任务中包含选项<java>

<java fork="true" classname="com.mycompany.MyMainClassName">

通过包含该选项,它使用正确找到我的 Oracle JDKfork="true"的命令创建了第二个 JVM 。java如果您不包含该fork="true" 选项,则用户程序将在使用的同一 JVM 中运行ant(可能不是您想要的 JDK)。

作为参考,完整的错误堆栈跟踪是:

 [java] java.lang.NoClassDefFoundError: com/sun/security/auth/UnixPrincipal
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:195)
     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:772)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:222)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:136)
     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:109)
     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java]     at java.lang.reflect.Method.invoke(Method.java:497)
     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [java]     at org.apache.tools.ant.Task.perform(Task.java:348)
     [java]     at org.apache.tools.ant.Target.execute(Target.java:435)
     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
     [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
     [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
     [java]     at org.apache.tools.ant.Main.runBuild(Main.java:853)
     [java]     at org.apache.tools.ant.Main.startAnt(Main.java:235)
     [java]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285)
     [java]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)
     [java] Caused by: java.lang.NoClassDefFoundError: com/sun/security/auth/UnixPrincipal
     [java]     at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:336)
     [java]     at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:1765)
     [java]     at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:1758)
     [java]     at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1626)
     [java]     at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254)
     [java]     at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:123)
     [java]     at com.touchcommerce.engagementloader.EngagementLoader.getFileSystem(EngagementLoader.java:342)
     [java]     at com.touchcommerce.engagementloader.EngagementLoader.load(EngagementLoader.java:364)
     [java]     at com.touchcommerce.engagementloader.EngagementLoader.main(EngagementLoader.java:454)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java]     at java.lang.reflect.Method.invoke(Method.java:497)
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:218)
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:153)
     [java]     ... 21 more
     [java] Caused by: java.lang.ClassNotFoundException: com.sun.security.auth.UnixPrincipal
     [java]     at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1388)
     [java]     at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1337)
     [java]     at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1095)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     [java]     ... 36 more
     [java] Java Result: -1
于 2016-01-12T21:25:20.680 回答