Ошибка с плагином Maven GAE + Google Cloud SQL

Вот моя конфигурация плагина:

<plugin>
                <groupId>net.kindleit</groupId>
                <artifactId>maven-gae-plugin</artifactId>
                <version>0.7.3</version>
                <dependencies>
                  <dependency>
                    <groupId>net.kindleit</groupId>
                    <artifactId>gae-runtime</artifactId>
                    <version>${gae.version}</version>
                    <type>pom</type>
                  </dependency>
                </dependencies>
                <configuration>
                    <jvmFlags>
                        <jvmFlag>-Drdbms.server=local</jvmFlag>
                        <jvmFlag>-Drdbms.driver=com.mysql.jdbc.Driver</jvmFlag>
                        <jvmFlag>-Drdbms.url=jdbc:mysql://localhost:3306/prova?user=root&amp;password=pass</jvmFlag>
                    </jvmFlags>
                    <serverId>appengine.google.com</serverId>
                </configuration>
            </plugin>

Вы можете прочитать больше здесь: https://developers.google.com/cloud-sql/docs/developers_guide_java

Сначала у меня была эта тривиальная ошибка, делая mvn gae:run

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Поэтому я добавил «настоящий» драйвер в свой pom.xml:

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.18</version>
    </dependency>

без результатов. Ошибка остается той же.

Часть трассировки стека:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.registerDriver(LocalRdbmsServiceLocalDriver.java:84)
    at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.init(LocalRdbmsServiceLocalDriver.java:73)
    at com.google.appengine.api.rdbms.dev.LocalRdbmsService.init(LocalRdbmsService.java:85)

изменить:

Моя новая конфигурация плагина:

<plugin>
                <groupId>net.kindleit</groupId>
                <artifactId>maven-gae-plugin</artifactId>
                <version>0.9.2</version>
                <dependencies>
                  <dependency>
                    <groupId>net.kindleit</groupId>
                    <artifactId>gae-runtime</artifactId>
                    <version>${gae.version}</version>
                    <type>pom</type>
                  </dependency>
                  <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.18</version>
                </dependency>
                </dependencies>
                <configuration>
                    <jvmFlags>
                        <jvmFlag>-Drdbms.server=local</jvmFlag>
                        <jvmFlag>-Drdbms.driver=com.mysql.jdbc.Driver</jvmFlag>
                        <jvmFlag>-Drdbms.url=jdbc:mysql://localhost:3306/prova?user=root&amp;password=pass</jvmFlag>
                    </jvmFlags>
                    <serverId>appengine.google.com</serverId>
<!--                     <sdkDir>${appengine.sdk.root}</sdkDir> -->
<!--                     <appDir>${basedir}/war</appDir> -->
                </configuration>
            </plugin>

person Fabio B.    schedule 28.02.2012    source источник
comment
1) Вы проверили, был ли добавлен jar коннектора mysql в web-inf/lib вашей войны? 2) Последняя версия maven-gae-plugin 0.9.2, попробуйте обновиться. 3) Пробовали ли вы установить область зависимости как тест?   -  person Arnaud Gourlay    schedule 28.02.2012
comment
1) да, maven правильно копирует его в структуру целевых папок   -  person Fabio B.    schedule 28.02.2012
comment
3) почему я должен это делать? :-о   -  person Fabio B.    schedule 28.02.2012
comment
ХОРОШО. Ничего не получилось! Я нахожу в папке WEB-INF/lib целевого веб-приложения файл mysql jar. Пробовал обновить плагин до версии 0.9.2. Установите область зависимости для проверки, но ничего!   -  person Fabio B.    schedule 29.02.2012


Ответы (3)


Хорошо, я решил. Я вручную поместил mysql-connector-java-5.1.18-bin.jar в папку SDK:

 file:///opt/appengine-java-sdk-1.6.0/lib/impl/

Ошибка меняется на более удобную:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Однако спасибо за предложения

person Fabio B.    schedule 29.02.2012
comment
Спасатель! Это где-нибудь задокументировано?! - person IrishDubGuy; 21.11.2012

Или вы можете использовать maven-antrun-plugin, который сделает это за вас во время сборки. Больше никакого ручного вмешательства для вашей проектной группы (я использую это с официальным appengine-maven-plugin, вам нужно адаптировать путь для использования с maven-gae-plugin):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.7</version>
  <executions>
    <execution>
      <!-- Use 'package' instead of 'install' if you want the Driver to be available for 'integration-test' -->
      <phase>package</phase>
      <configuration>
        <target>
          <!-- delete existing mysql jar from appengine sdk lib/impl -->
          <delete>
            <fileset 
              dir="${settings.localRepository}/com/google/appengine/appengine-java-sdk/${appengine.target.version}/appengine-java-sdk/appengine-java-sdk-${appengine.target.version}/lib/impl" 
              includes="**/mysql-connector-java*" />
          </delete>
          <!-- copy mysql jar into appengine sdk lib/impl -->
          <copy 
            file="${settings.localRepository}/mysql/mysql-connector-java/${mysql.version}/mysql-connector-java-${mysql.version}.jar" 
            todir="${settings.localRepository}/com/google/appengine/appengine-java-sdk/${appengine.target.version}/appengine-java-sdk/appengine-java-sdk-${appengine.target.version}/lib/impl"/>
        </target>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin> 
person avianey    schedule 11.03.2013
comment
Это и спасает жизнь, и элегантно, да благословит тебя Бог, мой друг. - person Michael Técourt; 23.07.2013

Вы также добавили это в зависимости плагинов?

Если это путь к классам плагина, GAE должен подобрать его.

person Rodolfo Hansen    schedule 28.02.2012
comment
можете ли вы объяснить мне лучше, как я могу это сделать? - person Fabio B.; 28.02.2012