【问题标题】:Error with Maven GAE Plugin + Google Cloud SQLMaven GAE 插件 + Google Cloud SQL 出错
【发布时间】:2012-03-17 17:47:26
【问题描述】:

这是我的插件配置:

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

【问题讨论】:

  • 1) 您是否检查过 mysql 连接器 jar 是否已添加到您的战争的 web-inf/lib 中? 2)maven-gae-plugin的最新版本是0.9.2,升级试试。 3)您是否尝试将依赖项的范围设置为“测试”?
  • 1) 是的,maven 正确地将其复制到目标文件夹结构中
  • 3) 为什么我必须这样做? :-o
  • 好的。没有任何效果!我在目标 webapp WEB-INF/lib 文件夹中找到了 mysql jar。尝试升级到插件的 0.9.2 v.。将依赖范围设置为“测试”,但什么都没有!

标签: mysql google-app-engine maven maven-gae-plugin google-cloud-sql


【解决方案1】:

好的,我解决了。我手动将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)

谢谢你的建议

【讨论】:

  • 救命稻草!这在任何地方都有记录吗?!
【解决方案2】:

或者您可以在构建时使用 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> 

【讨论】:

  • 这既是救生员又是优雅的,上帝保佑你,我的朋友
【解决方案3】:

您是否也将此添加到插件的依赖项中?

如果它是插件的类路径,它应该被 GAE 拾取。

【讨论】:

  • 你能更好地解释一下我该怎么做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2011-11-29
  • 2014-07-27
  • 2013-05-31
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
相关资源
最近更新 更多