我正在尝试使用以下代码创建类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>我做错了什么?
发布于 2010-06-05 13:58:25
正如@user353852所提到的,您当前的依赖项只包含Java 6 API,并且不包含任何方法体。所以你不能对它运行代码。要在容器之外运行代码,您需要获得一个“具体”依赖项(来自GlassFish存储库):
<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>请注意,不应该使用compile作用域声明此类依赖项,您不希望将其捆绑在一起(应该是provided或可能是test,而不是compile或runtime)。
我想知道javaee实现的提供者重要吗?一般来说,我使用Apache服务器,所以拥有与服务器上相同的javaee实现将是很棒的。
理论上没有。但实际上,我建议您使用您将要使用的服务器(或Java参考实现)中的实现JAR。由于您使用的是Java 6,在这两种情况下,这实际上都意味着来自GlassFish v3的JARS。
第二个问题更为重要。javax.servlet只是javaee实现的一部分,我在哪里可以找到其他的.现在我需要“javax/验证/验证”。
对于Bean验证API,您需要以下内容(Hibernate Validator是RI):
<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>如何确定哪个工件实现了javaee的每个方面。也许某个地方有某种“地图”?
除了来自这个好听的回答的BalusC之外,没有任何官方的东西会有帮助。
发布于 2010-06-05 10:38:59
看看这个职位。基本上,这些maven库是存根,只适合于针对特定对象进行编译。这些不是在运行时引用的。在运行时(即使是单元测试),您需要引用真正的jar文件,即servlet容器中的jar文件。
发布于 2020-05-31 07:30:25
确保将1.servlet类声明为公共类。2.路径在web.xml中正确指定,或以其他方式使用注释。
https://stackoverflow.com/questions/2979968
复制相似问题