首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于JavaEE6API的测试

基于JavaEE6API的测试
EN

Stack Overflow用户
提问于 2010-08-06 13:29:01
回答 3查看 20.5K关注 0票数 49

我为JAX编写了一个附加部分,并将JavaEE6API作为Maven依赖项包括进来。

代码语言:javascript
复制
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

然后我有一个小小的测试案例:

代码语言:javascript
复制
  @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));
  }

但我发现了一个错误:

代码语言:javascript
复制
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/core/MediaType
    ...

如果我将泽西岛作为JAX实现,而不是Java,那么一切都很好。

由于BalusC的提示,我知道我猜到了什么: Java 6只是一个没有方法主体的API:来自java.net博客

您可以用这个jar编译您的代码,但是您当然不能用它来运行您的应用程序,因为它只包含Java 5 API,并且不包含任何方法体。如果尝试运行,就会得到以下异常: 线程“主”java.lang.ClassFormatError中的异常:类文件javax/mail/Session中非本机或抽象的方法中的缺席代码属性 为了执行Java 5应用程序,您仍然需要一个Java 5容器,比如GlassFish应用服务器。

我尝试过用test范围添加Jersy,但是它没有起作用。

代码语言:javascript
复制
<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>

如何测试只依赖于官方Java的软件?

溶液

提供者(泽西)需要放在pom.xml中的API (Javeee)之前。

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-06 14:50:31

不确定这是否能解决您的问题,但是GlassFish Embedded提供了Java 6实现。将此添加到pom.xml

代码语言:javascript
复制
<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>

glassfish-embedded-all 之前声明工件javaee-api是很重要的。

票数 30
EN

Stack Overflow用户

发布于 2012-11-21 13:57:14

对于我来说,JBoss的实现比整个Glassfish要小,所以我使用:

代码语言:javascript
复制
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>${version.jboss-javaee-6.0}</version>
        <type>pom</type>
    </dependency>

<scope>test</scope>也不应造成任何伤害。

票数 8
EN

Stack Overflow用户

发布于 2013-02-22 22:38:06

另一种是JSR提供者不可知论的

代码语言:javascript
复制
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>jsr311-api</artifactId>
  <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

这允许您与不同的提供程序交换泽西。对于Glassfish 3.1.2,1.11根据球衣pom使用jsr311版本1.1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3424207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档