Google Web Toolkit运行时错误:方法中的代码属性不是本机或抽象的

如何解决Google Web Toolkit运行时错误:方法中的代码属性不是本机或抽象的

| 我在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)
我使用Eclipse(Helios)和Eclipse GWT-PLugin。该Web应用程序由内部App Server托管。在Mac OS X上,JDK是1.6。 有什么想法吗?     

解决方法

        JDK不包含
javax.persistence
包的实现-它是Java EE的一部分。即使这样做,您也不应该在客户端上包含与SQL相关的库-GWT应用程序无法直接查询SQL Server。     ,        javaee-api是剥离的代码。即实际的逻辑字节代码已从类中删除。与GWT搭配使用效果不佳 对于Java EE 6,替换:
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
</dependency>
与:
<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>
由于已提供,因此不会影响您的部署。     ,        我将总结有关此错误的经验,以帮助某人(并阐明一些方案)。 作为@Tom,我使用eclipse和GWT插件(这意味着我倾向于在项目>运行方式> Web应用程序上单击鼠标左键,以运行/测试我的Web应用程序).​​.. 另外,我的项目基于maven,所以我的GWT项目是使用maven GWT插件提供的maven原型创建的:
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
...
</plugin>
根据插件文档(google_plugin),该插件生成的项目与GWT Eclipse插件完美集成;那是真实的! 但是,如果您的客户端代码(转换为javascript的Java代码)包含JPA批注(例如域对象),则在各种情况下都会遇到一些错误(这里我假设您使用的是maven,但是结论也可以应用于常规项目): 场景一(编译错误):您将无法编译GWT应用程序,因为编译器将抱怨不知道这些注释中的任何一个。如果您使用的是maven,则可以使用依赖项解决此问题:
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
</dependency>
方案二(代码已编译,但是在devmode上运行应用程序时出现\“ thesence属性... \”错误):@rjdkolb指出,问题在于javaee-api依赖项是剥离代码。 ..因此,为了消除错误,您应该使用完整的实现库替换该依赖项。我建议您使用自己的应用程序服务器库,在我的情况下为JBOSS ...所以我说,
<dependency>
  <groupId>org.jboss</groupId>
  <artifactId>ejb3-persistence</artifactId>
  <version>5.1.0.GA</version>
  <scope>provided</scope>
</dependency>
(请注意,我是从JBOSS nexus存储库获得该库的,然后将该库安装在本地MAVEN存储库中)... 还要确保该依赖项出现在gwt-user和gwt-servlet依赖项之前(因此该依赖项优先于最后两个)... 这是出现怪异部分的地方...如果您使用gwt插件运行GWT项目(我的意思是,您使用mvn gwt:run命令),您将摆脱\“ missing attribute ... \”问题... 但是,如果使用Eclipse GWT插件(“运行方式”>“ Web应用程序”),您仍然会遇到“缺少属性... \”问题...我不知道为什么,但是Eclipse插件没有\似乎没有完全遵守pom依赖关系;相反,它遵循项目属性(“项目属性”>“ Java构建路径”>“库”)中定义的类路径。 因此,为了消除错误,在使用选项“运行方式> Web应用程序”时,必须将完整的库(在我的情况下为ejb3-persistence)添加到项目类路径(“项目属性”>“ Java Build”)路径>库>添加...),并使该库优先于GWT Eclipse插件库(项目属性> Java构建路径>订购和导出;它必须出现在maven依赖项和GWT容器库之前)... 希望有帮助!     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-