0

I am trying to run a java.class file in Apache Tomcat server. I build using Maven.

I use the following command:

/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/bin/java -cp ".:/var/lib/tomcat6/webapps/my-servlet/WEB-INF/lib/*:/var/lib/tomcat6/webapps/my-servlet/WEB-INF/classes" com.myservlet.helper.MyClassFile

Here is the error:

Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2511)
    at java.lang.Class.getMethod0(Class.java:2754)
    at java.lang.Class.getMethod(Class.java:1657)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)

And my Java version:

java version "1.8.0_40"  
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)  
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

I have read several threads about this error, but so far I have had no success solving this. Any help would be GREATLY appreciated!

f_puras
  • 2,521
  • 4
  • 33
  • 38

1 Answers1

0

Something is off here. Your directory path to the executable java

/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/bin/java

suggest an openJDK version 1.7, then you state that you are using an Oracle Hotspot JVM 1.8. I think you are compiling with the 1.8 Hotspot version, and trying to use the other to run. To fix it, just use one consistently. Probably the standard Hotspot, if you have no specific reason not to.

Gergely Bacso
  • 14,243
  • 2
  • 44
  • 64