LoginSignup
1
1

More than 5 years have passed since last update.

[Java][Microsoft] SQL ServerのJDBCドライバをひとつのjarに含めるとき注意するべきこと

Posted at

前段

Maven Shadeプラグイン便利ですね。
長ったらしいクラスパスを書かなくても、jarファイル一発でプログラム起動できます。

そんなjarファイルに、Microsoft SQL ServerのJDBCドライバを入れようとして起きたことです。

やったこと

  • sqljdbc4.jarをダウンロードしてきて、ローカルのMavenレポジトリに格納しました。
  • pom.xmlに先のsqljdbc4.jarへの依存性を記載しました。
  • shadeプラグインでひとつのjarにまとめるようにしました。

起きたこと

実行すると、こんなエラーで落ちました。

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes 

同じ問題にあたっているひと → https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f5c69fee-8c68-4601-bfcb-376e21dfa809/sql-server-jdbc-javalangsecurityexception-invalid-signature-file-digest?forum=sqldataaccess

原因

sqljdbc4.jarの中に署名が入っているから?

ぜんぜんわかってないです。

解決策

sqljdbc4.jarに含まれている署名ファイル(?)を、最終jarに含めないようにします。

pom.xml
(snip)
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
(snip)
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
(snip)

ひとりごと

Javaがjarファイルをどのように扱って実行しているのか、理解しないとですね。。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1