我正在尝试使用以下代码创建类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>
我在做什么错?
<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 EE参考实现)中使用实现JAR。由于您使用的是Java EE 6,在两种情况下,这实际上都意味着GlassFish v3中的JARS。
第二个问题至关重要。 javax.servlet只是javaee-api实现的一部分,在哪里可以找到其他部分。现在,我需要“ javax / validation / Validation”。对于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的this nice answer以外,没有其他人会帮忙。
real jar文件,即servlet容器中的一个。