GAE: java.lang.NoClassDefFoundError: com/google/appengine/api/blobstore/BlobstoreServiceFactory

Пожалуйста, помогите мне с этим. Я использую хранилище BLOB-объектов для сохранения изображений, и оно отлично работает в моей локальной среде. Но когда я развертываю тот же код в облаке, он выдает мне исключение: java.lang.NoClassDefFoundError: com/google/appengine/api/blobstore/BlobstoreServiceFactory

Я использую GAE 1.8.4.


person Archit    schedule 03.09.2014    source источник


Ответы (2)


Скорее всего, appengine-api.jar отсутствует в вашей папке war/WEB-INF/lib/.

Если вы используете Eclipse, щелкните вкладку Проблемы. Вы можете увидеть предупреждение о том, что этот jar недоступен на сервере. Щелкните правой кнопкой мыши это предупреждение, выберите QuickFix, выберите опцию «Копировать...». Или скопируйте эту банку в этот каталог вручную.

person Andrei Volgin    schedule 03.09.2014
comment
Привет @Andrei, я использую maven. я должен указать какую-либо зависимость в файле pom.xml? - person Archit; 03.09.2014
comment
только что проверил мой WEB-INF/lib/ и нашел там файл appengine-api-1.0-sdk-1.8.4.jar. А также нет предупреждений. - person Archit; 03.09.2014
comment
У вас должен быть appengine-api.jar в дополнение к банке, которую вы нашли. - person Andrei Volgin; 03.09.2014

В моем случае требуемый jar находился внутри папки WEB-INF/lib, но ошибка все еще происходила... Я обнаружил, что эта ошибка возникает из-за того, что Jetty 9 еще не был выполнен с процессом загрузки класса, в то время как один из моих классов инициализации был требуется BlobstoreService:

public class InitializeAppContextListener implements ServletContextListener {

    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

Поэтому мне пришлось отложить инициализацию переменной экземпляра после полной загрузки контекста следующим образом:

public class InitializeAppContextListener implements ServletContextListener {
    private BlobstoreService blobstoreService;

    public void contextInitialized(ServletContextEvent event) {
        blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

Затем веб-приложение снова смогло нормально запуститься. Это новое поведение появилось после того, как мы обновили servlet-api 2.5 до 3.1 с помощью JDK 1.8...

person A. Masson    schedule 01.10.2017