2017-03-24 11 views
4

私のチームは$ JAVA_HOME/jre/lib/ext /フォルダにアプリケーションのcom.mysql.jdbc.Driver jarを持っていますが、 JDKに対するこの依存関係を取り除き、Gradleでより再現性の高いビルドを作成します。

私はあなたが私の依存関係の上部に見ることができます私のbuild.gradleにドライバ、コメントを追加しました:$ JAVA_HOME/JRE/libに/ EXTからjarファイルを削除する/し、それを入れた後

dependencies { 
     compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.+' 
     compile group: 'com.notnoop.apns', name: 'apns', version: '1.0.0.Beta6' 
     compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21' 
     compile group: 'com.google.code.gson', name: 'gson', version: '1.7.2' 
     compile group: 'net.sf.jazzy', name: 'jazzy', version: '0.5.2-rtext-1.4.1' 
     compile group: 'org.apache.lucene', name: 'com.springsource.org.apache.lucene.search.spell', version: '2.4.1' 
     compile group: 'com.rabbitmq', name: 'com.springsource.com.rabbitmq.client', version: '1.8.1' 
     compile group: 'com.sun.xml', name: 'com.springsource.com.sun.xml.bind', version: '2.2.0' 
     compile group: 'com.sun.xml.rpc', name: 'jaxrpc-impl', version: '1.1.3_01' 
     compile group: 'com.rabbitmq', name: 'amqp-client', version: '3.6.5' 
     testCompile group: 'junit', name: 'junit', version: '4.11' 
     compile group: 'com.mashape.unirest', name: 'unirest-java', version: '1.3.1' 
     compile fileTree(dir: 'local_lib', include: '*.jar') 
} 

を私はデータベースにアクセスしようとした後カタリナのログにこのエラーが表示されます:

database.BaseDbao.getConnection - We could not create any connection. 
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver' 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) 
    at database.BaseDbao.getConnection(BaseDbao.java:116) 
    at database.UserDbao.getAuthorizedResultBean(UserDbao.java:357) 
    at database.Dbao.getAuthorizedResultBean(Dbao.java:3635) 
    at AuthServlet.doPost(AuthServlet.java:71) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at servlets.filters.servletContextFilter.doFilter(servletContextFilter.java:11) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130) 
    ... 22 more 
Dbao.getAuthorizationResultBean() Error - Cannot load JDBC driver class 'com.mysql.jdbc.Driver' 
LoginFailed for :suburbantest:because ::10.0.0.22 

いずれの洞察力も高く評価されます!

+0

私はTomcatの/ libフォルダ内のJARを置く場合できます。これはもちろん、Webアプリケーションを特定のTomcat JARに依存させるため、JARをextフォルダに入れるのと同じ問題があります。なぜそれはGradleを除いてどこでもうまくいくように見えますか? –

+0

それはmysqlのjdbcドライバですか? jdkに付属のApache derby jdbcドライバがあります。正しいファイルをコピーしたことを確認してください。 –

+0

'lib/ext'は廃止され、Java 9で削除され、stuffを入れません。また、tomcat libフォルダに置くのと同じではありません。 –

答えて

5

データソースは、アプリケーション構成に置くのではなく、Tomcatの構成で定義します。

Tomcatにはクラスローダーの階層があります。その詳細についてはwebsiteで読むことができますが、JDKクラスローダー(ブートストラップ)、Tomcatクラスローダー(システム)、アプリのクラスローダーの3つの面白いクラスローダーがあります。 )。

ドライバのjarファイルを$ JAVA_HOME/jre/lib/ext /に置くと、それをJDKクラスローダに追加します。 Tomcat/libに追加すると、Tomcatクラスローダーに追加されます。そしてあなたのアプリのgradleでそれを定義するとき、それをアプリケーションクラスローダーに追加します。

ケースのデータソース設定はTomcatの設定にあるので、JDKとTomcatのクラスローダーだけを検索します。

一つの解決策は、(なぜあなたはTomcatの中で、それが必要なのでしょうか?あなたは、同じデータソースを使用する複数の戦争を持っていますか?)アプリ内でのデータソースの構成を定義することです

+0

同じデータソースを使用するWARが複数あることを確認しました。だから私はちょうどそのMySQLのJARを他のすべてのWARに投げ込み、Tomcatでデータソースの定義を取ることができますか? –

+0

これは達成したいことによって異なります。各WARにデータソースをレプリケートしたい、またはREUSEに再作成しますか? – Tarlog

+0

もしそれを再利用したいなら、その設定をTomcatの設定(これまでと同じ)のままにして、ドライバをTomcatのクラスローダ(tomcat/lib)のままにしておかなければなりません。それをアプリケーションのgradleファイルに入れることはできません。 – Tarlog

関連する問題