Can';t实例化javax.servlet.ServletException

Can';t实例化javax.servlet.ServletException,java,maven-2,servlets,jakarta-ee,java-ee-6,Java,Maven 2,Servlets,Jakarta Ee,Java Ee 6,我试图用以下代码创建类javax.servlet.ServletException的实例 public class MyTroubleViewer { public static void main(String[] args) { javax.servlet.ServletException servletException = new javax.servlet.ServletException("Hello"); System.out.println(servletExcepti

我试图用以下代码创建类javax.servlet.ServletException的实例

public class MyTroubleViewer {
 public static void main(String[] args) {
  javax.servlet.ServletException servletException = new javax.servlet.ServletException("Hello");
  System.out.println(servletException.getMessage());
 }
}
但我在创建时遇到了一个例外:

Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
...
Maven帮助我解决依赖问题:

<dependency>
 <groupId>javax</groupId>
 <artifactId>javaee-api</artifactId>
 <version>6.0</version>
 <type>jar</type>
 <scope>compile</scope>
</dependency>

爪哇
JavaEEAPI
6
罐子
编译

我做错了什么?

退房。基本上,这些maven库是存根,只适合编译。它们并不意味着在运行时被引用。在运行时(甚至对于单元测试),您将需要引用真实的jar文件,即servlet容器中的文件。

正如@user353852所提到的,您当前的依赖关系只包含JavaEE6API,不包含任何方法体。所以你不能对它运行代码。要在容器外运行代码,您需要获得一个“具体”依赖项(来自GlassFish存储库):

如何确定哪个工件实现了javaee的各个方面。也许某处有某种“地图”

只有巴卢斯科的官方人员才能提供帮助。

确保 1.servlet类被声明为public。
2.路径在web.xml中正确指定,或者使用注释。

我明白了。谢谢但我还有一个问题。在部署到web服务器之前,测试阶段需要Javaee。这是否意味着我应该在系统的类路径中使用JavaEE实现,或者有一种舒适的方式使用maven实现呢?Pascal,你能帮我一点忙吗?我想知道javaee实现的提供者是否重要?通常我使用Apache服务器,因此最好在服务器上使用相同的javaee实现。但这并不重要。第二个问题更为重要。servlet只是JavaEEAPI实现的一部分,在哪里可以找到其他部分。现在我需要“javax/validation/validation”。如何确定哪个工件实现了javaee的各个方面。也许某个地方有某种“地图”?我找到了“”,但似乎他们已经更改了存储库的内容,因为我找不到本页上提到的“javax.j2ee:j2ee”工件。@Denis您上次评论中提到的页面完全过时了。忽略它。我知道这是一篇老文章,但我只是在javax验证库上遇到了同样的问题。EclipseWTP将Glassfish库与Maven依赖项库分开来设置我的项目,因此我可以在Eclipes中构建,但是当我尝试从命令行进行mvn clean安装时,我遇到了ClassFormatError。一年多过去了,你的帖子仍然有帮助,帕斯卡。谢谢
<repositories>
  <repository>
    <id>glassfish-repository</id>
    <url>http://download.java.net/maven/glassfish</url>
  </repository>
  ...
</repositories>

<dependencies>
  <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet</artifactId>
    <version>3.0</version>
    <scope>test</scope>
  </dependency>
  ...
</dependencies>
<repositories>
  <!-- For Hibernate Validator -->
  <repository>
    <id>jboss</id>
    <name>JBoss repository</name>
    <url>http://repository.jboss.org/maven2</url>
  </repository>
  ...
</repositories>

<dependencies>
  <!-- Bean Validation API and RI -->
  <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.0.0.GA</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.0.2.GA</version>
    <scope>runtime</scope>
  </dependency>
  ...
</dependencies>