Отсутствует реализация Java EE - PullRequest
1 голос
/ 29 октября 2011

Я все еще не могу заставить мои модульные тесты работать. Когда я выполняю тест, я получаю атрибут ClassFormatException: Absent Code в методе, который не является собственным или абстрактным в файле класса javax/ejb/EJBAccessException. Это я написал в моем pom.xml:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javaee</artifactId>
    <version>6.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

Но это не работает. Если я открою файл repo/org/glassfish/javaee/6.0/javaee-6.0.jar в текстовом редакторе, он содержит только некоторый текст HTML. Ты хоть представляешь, что не так? Где я могу найти правильный javaee-6.0.jar? Если я открою тот в glassfish3/glassfish/lib, он содержит только немного pom.xml, ничего больше.

У меня есть слой данных, состоящий из сущностей, доступных через сессионные компоненты. Этот слой упакован и развернут как JAR. Ошибка связана с уровнем представления. Там нет EJB. Но я использую Spring MVC. Он загружает контроллеры в начале. И несколько контроллеров являются EJB-клиентами. Это не должно иметь значения, но один из них содержит строку import javax.ejb.EJBAccessException. Когда загрузчик Spring (скажем так) загружает этот класс, процесс загрузки завершается с вышеупомянутым исключением. Поэтому для продолжения теста мне нужна реализация Java EE.

Но этот вопрос на самом деле более общий. Это не первый раз, с чем я столкнулся с этой ошибкой: JAR зависимости недействителен, и когда я заглянул внутрь, я увидел обычный HTML-код.

Кстати: я удивлен, что до сих пор не нашел правильного ответа на этот фундаментальный вопрос в Интернете.

1 Ответ

1 голос
/ 30 октября 2011

Локальный репозиторий поврежден, файлы jar не должны содержать HTML содержимого.Возможно, один из ваших проектов загрузил испорченные артефакты из поврежденного удаленного хранилища.Возможно, ваш текущий проект в порядке, но другой использует поврежденное зеркало и т. Д.

Я бы удалил весь каталог repo/org/glassfish/javaee/6.0/.Maven загрузит артефакты снова, если они потребуются.Запустите mvn clean install после удаления и проверьте URL-адрес org/glassfish/javaee/6.0/javaee-6.0.jar.Он показывает, какое хранилище повреждено, если загруженные артефакты (например, jars) снова содержат HTML.

В любом случае, я не думаю, что вам нужна эта зависимость, поскольку javax.ejb.EJBAccessException находится в API (javaee-api.jar).(И это не в central .) Я бы удалил зависимость glassfish и попытался сначала запустить тест.Если это все еще не помогло, я бы запустил тест с java -verbose:class и проверил, какой jar содержит загруженный EJBAccessException.class.

...