Sun Java not loading UnixPrincipal (Ubuntu 12)



我在使用 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 环境(内部版本 1.6.0_33-b03) Java 热点(TM) 64 位服务器虚拟机 (内部版本 20.8-B03,混合模式)

$ lsb_release -a 没有可用的 LSB 模块。分销商编号:
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.(用户组信息.java:246) at org.apache.hadoop.fs.FileSystem$Cache$Key.(文件系统.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.UnixPrincipal at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361) at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1311) at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1070) at java.lang.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 的运行时版本中!

因此,不知何故,Java 运行时无法加载此类。 我想知道为什么?

一个小注意事项:我通过 ant 1.8 运行它。 但是,我认为这应该不会影响任何事情,因为我相信 Ant 类加载器相对稳定。

你现在可能已经解决了这个问题,但这是我最近与同样问题的纠结:

Sun java 和 gcj 都已安装。 交互式运行给了我 Sun java,UnixPrincipal类正确加载。 非交互运行(service myservice start)将无法正确设置JAVA_HOME并且系统将使用gcj,并且UnixPrincipal无法加载。 在我的服务脚本中显式设置JAVA_HOME解决了问题。

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

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

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

通过包含fork="true"选项,它使用 java 命令创建了第二个 JVM,该命令正确找到了我的 Oracle JDK。 如果您不包含 fork="true" 选项,那么用户程序将在 ant 正在使用的同一 JVM 中运行(这可能不是您想要的 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

最新更新