Upgrade to Pro — share decks privately, control downloads, hide ads and more …

sbt-assemblyにハマってDB接続できず時間が溶けた話

wakye5815
February 27, 2024

 sbt-assemblyにハマってDB接続できず時間が溶けた話

wakye5815

February 27, 2024
Tweet

More Decks by wakye5815

Other Decks in Programming

Transcript

  1. 名前衝突祭り [error] Deduplicate found different file contents in the following:

    [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/... [error] Deduplicate found different file contents in the following: [error] Jar name = ... org = ... target = META-INF/... [error] Jar name = ... org = ... target = META-INF/...
  2. META-INFを笑うもの 「META-INF?どうせ署名とかだけだし捨てても大丈夫っしょ」 build.sbt val assemblyMergeStrategySetting = assemblyMergeStrategy := { case

    PathList("META-INF", _*) => MergeStrategy.discard case x => val oldStrategy = (ThisBuild / assemblyMergeStrategy).value oldStrategy(x) }
  3. META-INFに泣く 原因 JDBCのドライバクラスを自動でロードするのにjarの仕様であるサービスプロバイダを使って いた DriverManager メソッド getConnection と getDrivers は、Java

    Standard Edition サー ビスプロバイダメカニズムをサポートするように拡張されました。JDBC 4.0 ドライバ は、ファイル META-INF/services/java.sql.Driver を含める必要があります。このファイ ルには、java.sql.Driver の JDBC ドライバ実装の名前が含まれます。たとえば my.sql.Driver クラスをロードするために、META-INF/services/java.sql.Driver ファイル に次のエントリが含まれます。 https://docs.oracle.com/javase/jp/6/api/java/sql/DriverManager.html