方法中的Absent Code属性在类文件javax/servlet/ServletException中不是本机的或抽象的

sch*_*han 21 java servlets

我打算在我的应用程序中使用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)

希望有所帮助,它确实对我有用.

  • 谢谢!与javaee-web-api中的javax有类似的问题.像你描述的那样排除它(但是javax:javaee-web-api)解决了它. (2认同)

fre*_*ele 8

我交易到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)