Den*_*nis 13 java maven-2 servlets java-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(servletException.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
但我在创建时遇到异常:
Exception in thread "main" 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)
Maven帮助我依赖:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Pas*_*ent 21
正如@ user353852所提到的,您当前的依赖项仅包含Java EE 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>
Run Code Online (Sandbox Code Playgroud)
请注意,不应使用compile作用域声明此类依赖项,您不希望将其捆绑(它应该是provided或可能test,但不是compile或runtime).
我想知道javaee实现的提供者是否重要?通常我使用Apache服务器,因此拥有与服务器上相同的javaee实现会很棒.
从理论上讲,没有.但实际上,我建议使用您将要使用的服务器(或Java EE Reference Implementation)中的实现JAR.由于您使用的是Java EE 6,因此在两种情况下,这实际上都意味着来自GlassFish v3的JARS.
第二个问题更为重要.的javax.servlet是JavaEE-API实现的只是其中的一部分,我在哪里可以找到其他人.现在我需要"javax/validation/Validation".
对于Bean Validation 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>
Run Code Online (Sandbox Code Playgroud)
如何确定哪个工件实现了javaee的每个方面.也许在某处有某种"地图"?
没有任何正式的,但BalusC的这个好答案将有所帮助.
| 归档时间: |
|
| 查看次数: |
21138 次 |
| 最近记录: |