Domanda

Ecco la mia configurazione del plug -in:

<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>

Puoi leggere di più qui: https://developers.google.com/cloud-sql/docs/developers_guide_java

Per prima cosa ho avuto questo errore banale, facendo mvn gae:run

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

Quindi ho aggiunto il driver "reale" al mio pom.xml:

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

senza risultati. L'errore rimane lo stesso.

Parte della stacktrace:

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)

modificare:

Il mio nuovo plugin conf:

<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>
È stato utile?

Soluzione

Ok ho risolto. Metto manualmente mysql-connector-java-5.1.18-bin.jar Nella mia cartella SDK:

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

L'errore cambia in un più comodo:

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

Grazie per i suggerimenti comunque

Altri suggerimenti

Oppure puoi usare Maven-Antrun-Plugin, fallo per te al momento della costruzione. Niente più interventi manuali per il tuo team di progetto (lo uso con l'officale AppEngine-Maven-plugin, è necessario adattare il percorso per l'uso con 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> 

L'hai aggiunto anche alle dipendenze dei plugin?

Se è il percorso di classe del plugin, dovrebbe essere raccolto da GAE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top