0

Я перехожу из устаревшего API файлов в новую клиентскую библиотеку Cloud Storage по старому проекту и, похоже, имеет проблемы с зависимостями. Мне не удалось заставить Maven работать, поэтому я устанавливаю необходимые банки вручную. Я могу скомпилировать и запустить мой сервлет, но получаю эту ошибку во время выполнения, когда я пытаюсь получить доступ к Cloud SQL с помощью DriverManager.getConnection():NoClassDefFoundError HttpTransport в Eclipse с помощью Google App Engine

java.lang.NoClassDefFoundError: com/google/api/client/http/HttpTransport 

Что баночка HttpTransport должна быть?

Как я могу проверить, включает ли война, которую я загружаю в Google?

У меня есть все это в моей войне/WEB-INF/Lib, а также в моих библиотек Путь сборки Java:

From App Engine SDK: 
    appengine-api-1.0-sdk-1.9.25.jar 
    appengine-api-labs.jar 
    appengine-api.jar 
    appengine-endpoints-deps.jar 
    appengine-endpoints.jar 
    appengine-jsr107cache-1.9.25.jar 
    appengine-jsr107cache.jar 
    datanucleus-appengine-1.0.10.final.jar 
    datanucleus-core-1.1.5.jar 
    datanucleus-jpa-1.1.5.jar 
    geronimo-jpa_3.0_spec-1.1.1.jar 
    geronimo-jta_1.1_spec-1.1.1.jar 
    jdo2-api-2.3-eb.jar 
    jsr107cache-1.1.jar 

The Cloud Storage Client Library: 
    appengine-gcs-client-0.4.4.jar 

Dependencies of the Cloud Storage Client Library: 
    guava-18.0.jar 
    joda-time-2.8.2.jar 
    google-api-services-storage-v1beta2-rev77-1.20.0.jar 

For good measure, every jar from the Cloud Storage API libs: 
    commons-logging-1.1.1.jar 
    google-api-client-1.20.0.jar 
    google-api-client-1.20.0.jar.properties 
    google-api-client-android-1.20.0.jar 
    google-api-client-android-1.20.0.jar.properties 
    google-api-client-appengine-1.20.0.jar 
    google-api-client-gson-1.20.0.jar 
    google-api-client-jackson2-1.20.0.jar 
    google-api-client-java6-1.20.0.jar 
    google-api-client-servlet-1.20.0.jar 
    google-http-client-1.20.0.jar 
    google-http-client-1.20.0.jar.properties 
    google-http-client-android-1.20.0.jar 
    google-http-client-android-1.20.0.jar.properties 
    google-http-client-appengine-1.20.0.jar 
    google-http-client-gson-1.20.0.jar 
    google-http-client-gson-1.20.0.jar.properties 
    google-http-client-jackson2-1.20.0.jar 
    google-http-client-jackson2-1.20.0.jar.properties 
    google-http-client-jdo-1.20.0.jar 
    google-http-client-jdo-1.20.0.jar.properties 
    google-oauth-client-1.20.0.jar 
    google-oauth-client-1.20.0.jar.properties 
    google-oauth-client-appengine-1.20.0.jar 
    google-oauth-client-java6-1.20.0.jar 
    google-oauth-client-jetty-1.20.0.jar 
    google-oauth-client-servlet-1.20.0.jar 
    gson-2.1.jar 
    gson-2.1.jar.properties 
    httpclient-4.0.1.jar 
    httpcore-4.0.1.jar 
    jackson-core-2.1.3.jar 
    jackson-core-2.1.3.jar.properties 
    jdo2-api-2.3-eb.jar 
    jetty-6.1.26.jar 
    jetty-util-6.1.26.jar 
    jsr305-1.3.9.jar 
    transaction-api-1.1.jar 
+0

Возможно, это предупреждение запуска является ключом (обратите внимание, что оба номера версий идентичны): версия API в этом SDK больше не поддерживается на сервере! ----------- Последние SDK: Release: 1.9.25 Отметка: Вт 7 июля 12:10:33 PDT 2015 версии API: [1] ------ ----- Ваш SDK: Релиз: 1.9.25 Timestamp: Thu Jul 23 12:07:39 PDT 2015 Варианты API: [1.0] –

+0

Когда плагин google строит и загружает войну, он перекликается с именем из каталога temp, который он использует, поэтому я мог убедиться, что банки действительно включены. Для меня это было: C: \ Users \ USERNAME \ AppData \ Local \ Temp \ appcfg312535284579766874.tmp –

ответ

0

Похоже, что это не имело ничего общего с файлами jar, классовым путем или облачным хранилищем. Приложение использует старый метод RDBMS соединения для Cloud SQL, что я не знаю, был устаревшим:

DriverManager.registerDriver(new AppEngineDriver()); 
Connection conn = DriverManager.getConnection("jdbc:google:rdbms://incredipede:instance/incredipede"); 

Я собирающий вызов registerDriver был неисправным, так необходимые классы не были доступны, когда я назвал GetConnection(). Переход на новое соединение тузд и метод Class.forName() работали:

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn = DriverManager.getConnection("jdbc:google:mysql://incredipede:instance/incredipede?user=root"); 

Also must add this to appengine-web.xml: 
<use-google-connector-j>true</use-google-connector-j> 

Кстати, я заметил, что введя имя экземпляра приложения двигатель в затмении (проект> свойства> Google> App Engine> Google Cloud SQL> App Engine sql) вызывается аналогичные ошибки HttpTransport даже в новом проекте. Это может быть ошибка в плагине appengine eclipse или в приложении 1.9.25 ... Я сомневаюсь, что эти ошибки предназначены для старого метода подключения, устарели или нет.

0

ком/Google/API/клиент/HTTP/HttpTransport является частью AppEngine -tools-api.jar

+0

Добавление appengine-tools-sdk-1.9.25.jar из mvnrepository.com не исправило его. HttpTransport также находится в google-http-client, appengine-api и appengine-endpoints, поэтому я уже включаю его 3 раза. Я думаю, это проблема класса. –

Смежные вопросы