Я пишу дополнение к JAX-RS и включаю API Java EE 6 в качестве зависимости от Maven.Тестирование на Java EE 6 API
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Тогда у меня есть маленький тестовый пример:
@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));
}
Но я получаю сообщение об ошибке:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/core/MediaType
...
Если я включаю Джерси как реализация JAX-RS вместо Java EE API все в порядке.
Благодаря намеком BalusC, я знаю, что я догадалась: Java EE 6 является только API без тел методов: From the java.net blog
You can compile you code with this jar, but of course you cannnot run your application with it since it contains only the Java EE 5 APIs and does not contain any method bodies. If you try to run, you would get this exception:
Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/mail/Session
In order to execute a Java EE 5 application, you'll still need a Java EE 5 container, like for example the GlassFish application server.
Я пытался добавить Jersy с test
рамки, но это не так Работа.
<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 EE API?
Решение
Поставщик (Джерси) должен быть помещен перед тем на API (javeee-API) в pom.xml.
<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>
Вот некоторые связанные проблемы с проницательными ответами: http://www.google.com/search?q=%22java.lang.ClassFormatError%3A+Absent+Code+attribute+in+method+that+is+not + native + или + abstract + in + class + file% 22 – BalusC
Я действительно грызла свои ногти этой проблемой, прежде чем я столкнулся с этим вопросом. Благодаря! –