情况
我们正在使用 MySQL 数据库、jenkins 和使用 maven 的构建环境运行声纳。
问题
执行 jenkins 作业时,它会中止并显示以下消息:
[错误] 无法在项目 playground_eb 上执行目标 org.codehaus.mojo:sonar-maven-plugin:2.0:sonar (default-cli):无法执行声纳:无法连接到数据库:无法创建类 'com 的 JDBC 驱动程序.mysql.jdbc.Driver' 用于连接 URL 'http://192.168.1.220:3306':没有合适的驱动程序
配置
服务器
192.168.1.220 (Debian 6.0.6):
- 运行 Jenkins (@ port 8080)
- Sonar (@ port 9000)
- MySQL Database (@ port 3306)
192.168.1.221 (Windows 7):
- 运行 Maven 和整个构建环境
配置
数据库在 sonar.properties 文件中配置 - 使用 localhost。Sonar 及其数据库是通过 jenkins Web 界面配置的 - 使用 IP。我猜这可能会导致错误,但在 sonar.properties 文件中配置 IP 会导致声纳不再启动。
完整的异常堆栈
org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 playground_eb 上执行目标 org.codehaus.mojo:sonar-maven-plugin:2.0:sonar (default-cli):无法执行 Sonar 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 引起:org.apache.maven.plugin.MojoExecutionException:无法执行声纳 在 org.codehaus.mojo.sonar.Bootstraper.executeMojo(Bootstraper.java:118) 在 org.codehaus.mojo.sonar.Bootstraper.start(Bootstraper.java:65) 在 org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:90) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 更多 原因:java.lang.IllegalStateException:连接数据库失败 在 org.sonar.core.persistence.DefaultDatabase.start(DefaultDatabase.java:74) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:110) 在 org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89) 在 org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84) 在 org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169) 在 org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132) 在 org.picocontainer.behaviors.Stored.start(Stored.java:110) 在 org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1009) 在 org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1002) 在 org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:760) 在 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:72) 在 org.sonar.batch.bootstrap.Module.start(Module.java:67) 在 org.sonar.batch.bootstrap.BootstrapModule.doStart(BootstrapModule.java:83) 在 org.sonar.batch.bootstrap.Module.start(Module.java:68) 在 org.sonar.batch.bootstrapper.Batch.startBatch(Batch.java:75) 在 org.sonar.batch.bootstrapper.Batch.execute(Batch.java:60) 在 org.sonar.maven3.SonarMojo.execute(SonarMojo.java:142) 在 org.codehaus.mojo.sonar.Bootstraper.executeMojo(Bootstraper.java:113) ... 23 更多 原因:org.apache.commons.dbcp.SQLNestedException:无法为连接 URL 'http://192.168.1.220:3306' 创建类 'com.mysql.jdbc.Driver' 的 JDBC 驱动程序 在 org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 在 org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 在 org.apache.commons.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098) 在 org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350) 在 org.sonar.core.persistence.DefaultDatabase.initDatasource(DefaultDatabase.java:131) 在 org.sonar.core.persistence.DefaultDatabase.start(DefaultDatabase.java:68) ... 44 更多 原因:java.sql.SQLException:没有合适的驱动程序 在 org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1443) ... 49 更多