2017-05-30 83 views
2

我繼承了JBOSS 4.2.3.GA。 ear項目中,一切都加載和運行的罰款,如果我在JDK 7u45建造它,但未能早期加載&運行在JBoss引導,如果我與JDK 7的任何較新的更新(例如7u76,7u79,7u80)建立它。ClassNotFoundException僅依賴於JDK7更新版本?

JBOSS服務器本身在Java 1.7.0_45上運行。

記錄的失敗原因是一類ClassNofFoundException,實際上是有(即使是失敗的.ear):

log4j:ERROR Could not create the Layout. Reported error follows. 
java.lang.ClassNotFoundException: dbs.common.logger.CsvLayout 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     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:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:190) 
     at org.apache.log4j.helpers.Loader.loadClass(Loader.java:178) 
     at org.apache.log4j.xml.DOMConfigurator.parseLayout(DOMConfigurator.java:555) 
     at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:269) 
     at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176) 
     at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191) 
     at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523) 
     at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:436) 
     at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:999) 
     at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:867) 
     at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:773) 
     at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:901) 
     at org.jboss.logging.Log4jService$URLWatchTimerTask.reconfigure(Log4jService.java:643) 
     at org.jboss.logging.Log4jService$URLWatchTimerTask.run(Log4jService.java:582) 
     at org.jboss.logging.Log4jService.setup(Log4jService.java:460) 
     at org.jboss.logging.Log4jService.createService(Log4jService.java:476) 
     at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260) 
     at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:243) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
     at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) 
     at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
     at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 
     at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
     at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
     at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978) 
     at com.sun.proxy.$Proxy0.create(Unknown Source) 
     at org.jboss.system.ServiceController.create(ServiceController.java:330) 
     at org.jboss.system.ServiceController.create(ServiceController.java:273) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
     at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) 
     at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
     at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
     at com.sun.proxy.$Proxy4.create(Unknown Source) 
     at org.jboss.deployment.SARDeployer.create(SARDeployer.java:260) 
     at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969) 
     at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818) 
     at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782) 
     at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
     at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) 
     at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
     at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 
     at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
     at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
     at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
     at com.sun.proxy.$Proxy5.deploy(Unknown Source) 
     at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482) 
     at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362) 
     at org.jboss.Main.boot(Main.java:200) 
     at org.jboss.Main$1.run(Main.java:508) 
     at java.lang.Thread.run(Thread.java:744) 

通常情況下,我會很容易地找到一個real理由一ClassNofFoundException,但這個時候我感到莫名其妙,考慮到以下事實:(!包括CLASSPATH

  1. 整個環境,爲.ear相同

  2. 上述「找不到類」 dbs.common.logger.CsvLayout ,正是在它應該是相同的路徑common.jar文件。

  3. 構建中沒有任何錯誤。在其他人的開發工作站(與Eclipse等相同)構建.ear與JDK 7u79(即稍後更新爲7u45)時,會導致正確加載並運行(在同一臺服務器和環境中)的.ear文件。

什麼可能解釋這樣的ClassNofFoundException?

我錯過了什麼?


更新: 比較工作和不工作common.jar文件之間的「未找到」 CsvLayout.class,顯示有在class file format的major_version的差異。工作的有0x33(Java SE 7),失敗的有0x34(Java SE 8)。

我一直小心總是使用執行環境只是jre7。那個0x34是怎麼潛入的?

+0

你看到了哪些主要版本? Java 7應該有51. –

+0

@ P.J.Meisch我剛剛更新了我的問題以包含您的問題的答案。這非常奇怪:我*在Java 8下運行Eclipse,但我確保只選擇使用Java 7的執行環境。我錯過了一個Eclipse/build.xml配置功能,該功能從實際中排除了「環境」Java建立? – datv

+0

common.jar如何構建?確保jar被編譯爲具有Java7級別。 'javac'的參數應該是maven項目中的'-target 1.7',這將是屬性' 1.8'。顯式配置爲7,否則編譯器將在Java8下運行時使用目標版本8。這不是執行環境的問題,而是構建環境的問題 –

回答

2

問題來自於庫文件common.jar:使用java 8構建而未指定目標類文件版本,因此生成了具有java 8類文件版本的jar文件。

構建Java 7類文件與Java 8則需要

  • 純java編譯:添加目標選項javac -target 1.7 <javafile>
  • 行家:添加屬性<maven.compiler.target>1.7</maven.compiler.target>
  • 螞蟻:添加<property name="ant.build.javac.source" value="1.7"/> <property name="ant.build.javac.target" value="1.7"/>到您的構建。 xml