我打算在我的应用程序中使用Java servlet.我在我的项目的POM.xml文件中包含以下内容以加载Java servlet 3.0实现jar.
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.2-b05</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
该项目编译得很好.但是,当我运行它时,我收到以下错误:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
Run Code Online (Sandbox Code Playgroud)
我在这里搜索它并找到了一些很好的答案.
我从他们中发现,当我们包含仅包含由servlet API定义的接口而不是实际实现的JAR时,会发生此错误.所以,我检查了我正在使用的glassfish jar只是接口或它也包含实现.我发现它是一个实现而不仅仅是接口.
所以现在,我想知道为什么我在运行时收到此错误.任何人?
更新:
刚才,我发现这是我身边一个明显的错误(我正在将jar添加到一个项目中,而正在运行一个完全不同的项目!).对不起,我很抱歉.添加glassfish servlet实现可以解决问题.
谢谢,Sandeep
Ric*_*ckB 15
我在过去2个小时左右的时间里一直在与一个与用于surefire插件的javaee-api和javaee-web-api依赖项相关的问题进行斗争.正如JBoss论坛上的人们刚才发布的那样,看来整个JEE6库被划分(根据Sun/Oracle的决定)分为API(仅限接口/存根)JAR和提供者.
这与此有何关系?如果您遇到问题,比如FacesContext类,则会出现如下错误:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/context/FacesContext
Run Code Online (Sandbox Code Playgroud)
如果你看一下依赖树,你会在编译类路径中找到一个默认的API JAR,它也会影响运行时的问题:
javax.faces:javax.faces-api:jar:2.1:provided
Run Code Online (Sandbox Code Playgroud)
为surefire插件配置添加显式排除将在测试时强制使用提供程序JAR依赖项:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<classpathDependencyExcludes>
<!-- exclude code absent api -->
<classpathDependencyExclude>javax.faces:javax.faces-api</classpathDependencyExclude>
</classpathDependencyExcludes>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
希望有所帮助,它确实对我有用.
我交易到glassfish-embedded-all并解决了这个问题.
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.2.2</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)