回答編集履歴

2

訂正2

2017/11/17 00:50

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,3 +1,13 @@
1
+ 訂正2:度々すみません。本回答は取り消します。
2
+
3
+
4
+
5
+ asahina1979さん回答をみて**自分の実験方法自体が間違っている**ことに気づきました。以下はmaven shade pluginを用いる方法(pom.xmlにMavenの依存関係を定義する方法?)ではなくIDEAに最初から含まれているMaven Integration pluginを用いてGUIでMavenによる依存ライブラリーをプロジェクトへ追加する方法での実験でした。JDBC Driverのロードについても、JARの生成方法についてもおお外ししていた回答でした。大変失礼いたしました。
6
+
7
+
8
+
9
+ ---
10
+
1
11
  実験しただけなので正しいかどうか確信はないのですが・・・
2
12
 
3
13
 

1

追記

2017/11/17 00:50

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -59,3 +59,31 @@
59
59
 
60
60
 
61
61
  このようにした上でCreate JAR from Modulesでartifactsを生成する際に「JAR files from libraries」の「extract to the target JAR」にチェックを入れておけば生成されたJARの中にmysqlのjarも展開された状態で含まれるようにできると思います。リスト1のように直接参照しない状況では「extract to the target JAR」にチェックを入れても「参照していないクラスは必要ない」と判断されるのかJARには含まれないようでした。
62
+
63
+
64
+
65
+ ---
66
+
67
+ 追記・訂正:
68
+
69
+ asahina1979さんからご指摘をいただきましたように、本回答の例は現在は標準的な方法ではなく、(充分調べられてないですが)JVMへのプロパティーjdbcDriverNameやdataSourceNameあるいはjava.sql.DriverManagerを介して実行時に利用者が任意のベンダーのDBMSを選択できるようにすることが可能になっているようです。**上の回答でクラスローダーにドライバー名を明示することが標準的な方法であるかのようにコメントしましたが、ここでその誤りを訂正してお詫びさせていただきます**。
70
+
71
+
72
+
73
+ 本件については2つのポイントがあると思います。
74
+
75
+
76
+
77
+ (1) JDBCのロードに失敗していること自体
78
+
79
+ [https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html](https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html)
80
+
81
+ を参照しますと,接続に必要な配慮について記載されてますが、(DBMS非依存の接続方法である)java.sql.DriverManagerを用いるか、またはクラスローダーに明示的にドライバークラスを指定する点とCLASSPATHにドライバーのjarのパスを含めることなどが記述されています。本件ではcom.mysql.jdbc.Driverが見つからないというエラーとのことなので上記いずれの方法にせよ(ドライバークラスは適切に設定されているようですので)CLASSPATHにJDBCドライバーが設定されていないことが原因であると思います。
82
+
83
+
84
+
85
+ (2) 本アプリケーションがmysqlに依存したものとして開発したい(mysql JDBC ドライバーを再配布することでの利用者の利便性もかねて)という場合のJARへ同梱するための方法。(元の回答はその想定の下での同梱方法になります)同梱するとCLASSPASSの問題はおこらないと思います。
86
+
87
+
88
+
89
+ 取り急ぎ訂正まで。