【发布时间】:2015-12-19 18:43:13
【问题描述】:
我正在使用 IntelliJ IDEA 14.1.5
我已经建立了 gradle 项目,我正在使用 mysql 作为我的数据库。
我在build.gradle文件中写了依赖:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'javax.servlet:javax.servlet-api:3.0.1'
compile 'mysql:mysql-connector-java:5.1.23'
runtime 'mysql:mysql-connector-java:5.1.23'
}
从 gradle 工具我刷新了所有项目。
在外部库中有:Gradle: mysql:mysql-connector-java:5.1.23
在项目结构中,Libraries 中还有 Gradle:mysql:mysql-connector-java:5.1.23 存在
编译后出现错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at authentication.ServletListener.contextInitialized(ServletListener.java:76)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1678)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1470)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1311)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1403)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$255(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/1878994965.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
可能是什么问题,我该如何解决?我实际上对 gradle 并不熟悉,请问您能帮忙解决这个问题吗?
我正在添加调用 mysql 依赖项的代码。没有什么特别的。它是 servletContextListener 类方法。 ContextInitialized 方法是创建连接的方法
public ServletListener() throws FileNotFoundException {
Properties properties = new Properties();
try {
properties.load(getClass().getResourceAsStream(configFileName));
} catch (IOException e) {
e.printStackTrace();
}
dbServer = properties.getProperty("db_server");
dbUser = properties.getProperty("db_user");
dbPassword = properties.getProperty("db_pass");
dbName = properties.getProperty("db_name");
dbName = properties.getProperty("db_name");
}
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://"+dbServer,dbUser,dbPassword);
BaseManager baseManager = new BaseManager(connection, dbName);
servletContext.setAttribute("baseManager",baseManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
gradle 依赖看起来不错,但是你能分享一些调用 mysql 的代码吗?
-
@AidanMoriarty 我已经添加了代码,所以你可以看到它,但没有什么特别的。或许我得换个方向看看?
-
我不得不提一件事,我也创建了与 IntelliJ IDEA 数据库连接的连接,并且它运行良好。但这里我使用的是 mysql 连接器版本 5.1.38。当我从 maven 存储库中添加 gradle 时,最高版本的替代方案是 5.1.23。
-
嗯,dev.mysql.com/doc/connector-j/en/… 调用的类加载调用略有不同,可能值得一试?
-
我刚刚用 .newInstance();没有区别。也许我在使用 gradle 构建时遇到问题?我在tomcat服务器上运行它。也许旧代码缓存在某个地方?我没有使用 gradle 任务来构建和运行我的项目,可以吗?
标签: java mysql jdbc intellij-idea gradle