Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google Web Toolkit运行时错误:方法中缺少非本机或抽象的代码属性_Java_Javascript_Gwt - Fatal编程技术网

Java Google Web Toolkit运行时错误:方法中缺少非本机或抽象的代码属性

Java Google Web Toolkit运行时错误:方法中缺少非本机或抽象的代码属性,java,javascript,gwt,Java,Javascript,Gwt,我正在做我在GWT的第一步,我被各种可能性所吸引 到目前为止,我已经建立了一个依赖于外部库中提供的java类的小项目。这个库通过maven(自己的存储库)提供给我的项目。 我想在客户端使用该库中的Java类——因此我必须在jar中提供源代码,并且必须确保这些类不使用不可翻译为Javascript的代码 到目前为止还不错。我终于克服了找不到源代码的错误。。现在,在web应用程序运行时出现一个新错误: java.lang.ClassFormatError: Absent Code attribute

我正在做我在GWT的第一步,我被各种可能性所吸引

到目前为止,我已经建立了一个依赖于外部库中提供的java类的小项目。这个库通过maven(自己的存储库)提供给我的项目。 我想在客户端使用该库中的Java类——因此我必须在jar中提供源代码,并且必须确保这些类不使用不可翻译为Javascript的代码

到目前为止还不错。我终于克服了找不到源代码的错误。。现在,在web应用程序运行时出现一个新错误:

java.lang.ClassFormatError: Absent
Code attribute in method that is not
native or abstract in class file
javax/persistence/LockModeType
    at java.lang.ClassLoader.defineClass1(Native
Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native
Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.getDeclaredMethods0(Native
Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.getMethod0(Class.java:2670)
    at java.lang.Class.getMethod(Class.java:1603)
    at com.google.gwt.dev.javac.TypeOracleMediator.createAnnotation(TypeOracleMediator.java:463)
    at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotationValue(TypeOracleMediator.java:725)
    at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotationValue(TypeOracleMediator.java:681)
    at com.google.gwt.dev.javac.TypeOracleMediator.createAnnotation(TypeOracleMediator.java:474)
    at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotation(TypeOracleMediator.java:640)
    at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotations(TypeOracleMediator.java:655)
    at com.google.gwt.dev.javac.TypeOracleMediator.resolveClass(TypeOracleMediator.java:801)
    at com.google.gwt.dev.javac.TypeOracleMediator.addNewTypes(TypeOracleMediator.java:416)
    at com.google.gwt.dev.javac.TypeOracleMediatorFromSource.addNewUnits(TypeOracleMediatorFromSource.java:54)
    at com.google.gwt.dev.javac.CompilationState.assimilateUnits(CompilationState.java:164)
    at com.google.gwt.dev.javac.CompilationState.<init>(CompilationState.java:82)
    at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:409)
    at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:299)
    at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:325)
    at com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:105)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:190)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
    at java.lang.Thread.run(Thread.java:680)
java.lang.ClassFormatError:不存在
方法中的代码属性不是
类文件中的本机或抽象
javax/persistence/LockModeType
位于java.lang.ClassLoader.defineClass1(本机
(方法)
位于java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:616)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
在java.net.URLClassLoader.access$000(URLClassLoader.java:58)
在java.net.URLClassLoader$1.run(URLClassLoader.java:197)
位于java.security.AccessController.doPrivileged(本机
(方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:307)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:248)
位于java.lang.Class.getDeclaredMethods0(本机
(方法)
位于java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
位于java.lang.Class.getMethod0(Class.java:2670)
位于java.lang.Class.getMethod(Class.java:1603)
在com.google.gwt.dev.javac.TypeOracleMediator.createAnnotation(TypeOracleMediator.java:463)上
位于com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotationValue(TypeOracleMediator.java:725)
位于com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotationValue(TypeOracleMediator.java:681)
在com.google.gwt.dev.javac.TypeOracleMediator.createAnnotation(TypeOracleMediator.java:474)上
位于com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotation(TypeOracleMediator.java:640)
位于com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotations(TypeOracleMediator.java:655)
位于com.google.gwt.dev.javac.TypeOracleMediator.resolveClass(TypeOracleMediator.java:801)
在com.google.gwt.dev.javac.TypeOracleMediator.addNewTypes(TypeOracleMediator.java:416)
位于com.google.gwt.dev.javac.TypeOracleMediatorFromSource.addNewUnits(TypeOracleMediatorFromSource.java:54)
在com.google.gwt.dev.javac.CompilationState.assimilateUnits上(CompilationState.java:164)
位于com.google.gwt.dev.javac.CompilationState.(CompilationState.java:82)
位于com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:409)
在com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom上(CompilationStateBuilder.java:299)
在com.google.gwt.dev.cfg.ModuleDef.getCompilationState上(ModuleDef.java:325)
位于com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:105)
位于com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:190)
位于com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510)
在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
运行(Thread.java:680)
我使用Eclipse(Helios)和EclipseGWT插件。Web应用程序由内部应用程序服务器托管。JDK在MacOSX上是1.6。
对此有什么想法吗?

JDK不包括
javax.persistence
包的实现——它是JavaEE的一部分。即使是这样,您也不应该在客户端包含SQL相关库—您的GWT应用程序无法直接查询SQL server。

javaee api是精简的代码。i、 e.从类中删除实际逻辑字节码。它与GWT的关系不太好

对于Java EE 6,替换为:

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
</dependency>

爪哇
JavaEEAPI
6
假如
与:

<dependency>
  <groupId>org.apache.geronimo.specs</groupId>
  <artifactId>geronimo-ejb_3.1_spec</artifactId>
  <version>1.0</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.apache.geronimo.specs</groupId>
  <artifactId>geronimo-jpa_2.0_spec</artifactId>
  <version>1.0</version>
  <scope>provided</scope>
</dependency>

org.apache.geronimo.specs
geronimo-ejb_3.1_规范
1
假如
org.apache.geronimo.specs
geronimo-jpa_2.0_规范
1
假如

不会影响您的部署,因为它是提供的。

我将总结有关此错误的经验,以帮助他人(并澄清一些场景)

作为@Tom,我使用eclipse和GWT插件(这意味着我倾向于左键单击我的项目>运行方式>Web应用程序,以便运行/测试我的Web应用程序)

此外,我的项目基于maven,因此我的GWT项目是使用maven GWT插件提供的maven原型创建的:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
...
</plugin>

org.codehaus.mojo
),插件生成的项目与GWT Eclipse插件完美集成;这是真的

但是,如果您的客户机代码(翻译为javascript的java代码)包含JPA注释(例如域对象),您将在各种情况下遇到一些错误(这里我假设您使用的是maven,但结论也可以应用于常规项目):

场景一(编译错误):您将无法编译GWT应用程序,因为编译器会抱怨不知道这些注释。如果您使用的是maven,则可以使用依赖项解决此问题:

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
</dependency>

爪哇
JavaEEAPI
6
假如
场景二(代码可以编译,但在devmode上运行应用程序时会出现“缺勤属性…”错误):正如@rjdkolb指出的,问题在于javaee api依赖项是一个剥离的代码。。。因此,为了消除错误,您应该用一个完整的imple替换该依赖项
<dependency>
  <groupId>org.jboss</groupId>
  <artifactId>ejb3-persistence</artifactId>
  <version>5.1.0.GA</version>
  <scope>provided</scope>
</dependency>