Sun Java没有加载UnixPrincipal(Ubuntu 12)

时间:2012-07-02 06:51:51

标签: java classloader

我在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   环境(build 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代号:
  精确

错误:

  

家/流浪/开发/工作区/ XXXXX / build.xml中:222:   java.lang.NoClassDefFoundError:com / sun / security / auth / UnixPrincipal       在org.apache.hadoop.security.UserGroupInformation。(UserGroupInformation.java:246)       在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)       在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.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-太阳1.6.0.33 / JRE / LIB / rt.jar中.....

这样表明这个类是在一个jar中,肯定是我的java的Runtime版本!

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

一个小注:我通过蚂蚁1.8运行它。但是,我不认为这会产生任何影响,因为我认为Ant类加载器相对稳定。

2 个答案:

答案 0 :(得分:1)

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

安装了Sun java和gcj。以交互方式运行,为我提供了Sun java,UnixPrincipal类正确加载。非交互式运行(service myservice start)将无法正确设置JAVA_HOME,系统将使用gcj而UnixPrincipal无法加载。在我的服务脚本中明确设置JAVA_HOME解决了问题。

答案 1 :(得分:0)

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

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

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

通过包含fork="true"选项,它使用正确找到我的Oracle JDK的java命令创建了第二个JVM。如果不包含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