Erreur avec le plugin Maven GAE + Google Cloud SQL
-
13-11-2019 - |
Question
Voici ma configuration de plugin:
<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&password=pass</jvmFlag>
</jvmFlags>
<serverId>appengine.google.com</serverId>
</configuration>
</plugin>
Vous pouvez lire plus ici: https://developers.google.com/cloud-sql/docs/developers_guide_java
J'ai d'abord eu cette erreur triviale, faisant mvn gae:run
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
J'ai donc ajouté le "vrai" pilote à mon pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
sans résultats. L'erreur reste la même.
Partie du 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)
Éditer:
Mon nouveau 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&password=pass</jvmFlag>
</jvmFlags>
<serverId>appengine.google.com</serverId>
<!-- <sdkDir>${appengine.sdk.root}</sdkDir> -->
<!-- <appDir>${basedir}/war</appDir> -->
</configuration>
</plugin>
La solution
Ok j'ai résolu. Je mets manuellement mysql-connector-java-5.1.18-bin.jar
Dans mon dossier SDK:
file:///opt/appengine-java-sdk-1.6.0/lib/impl/
Modifications d'erreur dans un plus confortable:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
Merci pour les suggestions cependant
Autres conseils
Ou vous pouvez utiliser maven-antrun-plugin le faire pour vous au moment de la construction. Plus d'intervention manuelle pour votre équipe de projet (j'utilise cela avec le Plugin de l'En application officielle, vous devez adapter le chemin pour une utilisation avec 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>
Avez-vous également ajouté cela aux dépendances des plugins?
S'il s'agit du chemin de classe du plugin, il doit être ramassé par GAE.