dea*_*mon 48 java junit maven-2 unit-testing java-ee
我写了一个JAX-RS的附加内容,并将Java EE 6 API作为Maven依赖项包含在内.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我有一个小测试用例:
@Test
public void testIsWriteable() {
class SpecialViewable extends Viewable {
public SpecialViewable() {
super("test");
}
}
FreeMarkerViewProcessor processor = new FreeMarkerViewProcessor(null);
assertTrue(processor.isWriteable(SpecialViewable.class, null, null,
MediaType.WILDCARD_TYPE));
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/core/MediaType
...
Run Code Online (Sandbox Code Playgroud)
如果我将Jersey包含为JAX-RS实现而不是Java EE API,那么一切都很好.
感谢BalusC的暗示,我知道我猜到了什么:Java EE 6只是一个没有方法体的API: 来自java.net博客
您可以使用此jar编译代码,但当然您无法使用它运行应用程序,因为它只包含Java EE 5 API并且不包含任何方法体.如果你试图运行,你会得到这个例外:
线程"main"中的异常java.lang.ClassFormatError:类文件javax/mail/Session中非本地或抽象的方法中的Absent Code属性
为了执行Java EE 5应用程序,您仍然需要Java EE 5容器,例如GlassFish应用程序服务器.
我试图用test范围添加Jersy,但它没有用.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey-version}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如何测试仅依赖官方Java EE API的软件?
解
提供者(Jersey)需要放在pom.xml中的API(javeee-api)之前.
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 29
不确定这会解决您的问题,但GlassFish Embedded提供了Java EE 6实现.将此添加到您的pom.xml:
<project>
...
<repositories>
<repository>
<id>glassfish-extras-repository</id>
<url>http://download.java.net/maven/glassfish/org/glassfish/extras</url>
</repository>
</repositories>
...
<dependencies>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
...
</project>
Run Code Online (Sandbox Code Playgroud)
据申报是很重要的glassfish-embedded-all神器之前的javaee-api.
至于我,JBoss的实现比整个Glassfish小,所以我使用:
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>${version.jboss-javaee-6.0}</version>
<type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
<scope>test</scope> 也应该没有伤害.
| 归档时间: |
|
| 查看次数: |
19820 次 |
| 最近记录: |