はじめに
MDB-SQLiteはMS Access(mdb)をSQLiteにコンバートするソフトウェアです。
Java製のオープンソース・ソフトウェア(New BSD License)です。
インストールするにはJava以外にAntが必要です。
ビルドに際してトラブったので備忘を兼ねて記載します。
インストール手順
1. [Java]
(https://www.oracle.com/technetwork/jp/java/javase/downloads/index.html)をインストールします。
2. Apache Antをダウンロードします。
2020年5月7日時点の最新はapache-ant-1.10.7でした。
適当な位置にコピーします。(私はD:\apache-ant-1.10.7に)
ここで環境変数 "ANT_HOME" にapache-ant-1.10.7のパスを設定します。
ついでに "PATH" 環境変数に %ANT_HOME%\bin を設定しておきます。
3. mdb-sqliteをダウンロードします。
適当な位置にコピーします。(私はD:\mdb-sqlite-1.0.2に)
4. mdb-sqliteをビルドします。
> cd D:\mdb-sqlite-1.0.2
> ant dist
とここでエラーが!!!
Buildfile: D:\mdb-sqlite-1.0.2\build.xml
prepare:
compile:
[javac] D:\mdb-sqlite-1.0.2\build.xml:45: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
BUILD FAILED
D:\mdb-sqlite-1.0.2\build.xml:45: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre1.8.0_211"
Total time: 0 seconds
ここでは2つのエラーがあって、
前半の [javac] D:\mdb-sqlite-1.0.2\build.xml:45: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
の部分はMDB-SQLiteのAnt1.8以降に発生する問題で、build.xmlを修正すれば解決します。
<target name="compile" depends="prepare">
<javac srcdir="${src.dir.java}" destdir="${classes.dir}" source="1.5" target="1.5" includeantruntime="false">
<classpath>
<path refid="classpath"/>
</classpath>
</javac>
</target>
includeantruntime="false"
の部分を追加します。
クラスパスにAntのランタイムライブラリを追加するかどうかの設定らしく、デフォルトでTrueとのこと。Ant1.8以降でこいつをFalseにしないと警告が出るらしい。ググったらいろんなサイトで言ってるけどデフォルトをFalseにしてほしい。
根本的なビルドエラーはBUILD FAILED
以降の部分でエラー内容を見ると環境変数 "JAVA_HOME" がJDKを指していないじゃないかとのこと。
環境変数 "JAVA_HOME" を設定して、ついでに "PATH" 環境変数に %JAVA_HOME%\bin を設定して解決です。
(ただし、%ANT_HOME%\binより後にあるとエラーとなるような記事を見たので注意です。)
Buildfile: D:\mdb-sqlite-1.0.2\build.xml
prepare:
compile:
[javac] D:\mdb-sqlite-1.0.2\build.xml:45: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
dist:
[one-jar] main.jar fs=main.jar
[one-jar] Building jar: D:\mdb-sqlite-1.0.2\dist\mdb-sqlite.jar
[one-jar] No 'manifest' attribute was specified for the <one-jar> task, a default manifest will be generated.
BUILD SUCCESSFUL
Total time: 0 seconds
変換
参考までにサンプルでついているMDBファイルをSQLiteに変換してみます。
> java -jar dist\mdb-sqlite.jar example\test-database.mdb test-database.sqlite