-jarオプションを付けたとき、-cp(-classpath)オプションは無視される

http://neo4j.org/のneo4j-shell-1.0.jarを利用するには、Wikiによると以下のように書けばいいとある。

$  java -jar neo4j-shell-1.0.jar -path test_db
ERROR (-v for expanded information):
        Neo4j not found on the classpath

Example arguments for remote:
        -port 1337
        -port 1337 -name shell
        ...or no arguments
Example arguments for local:
        -path /path/to/db
        -path /path/to/db -readonly

Errorの理由は、CLASSPATHにneo4jのライブラリが無いかららしい。

$ java -jar neo4j-shell-1.0.jar  -path test_db \
> -cp .:../libs/neo4j/neo4j-kernel-1.0/neo4j-kernel-1.0.jar:../libs/neo4j/neo4j-kernel-1.0/geronimo-jta_1.1_spec-1.1.1.jar
ERROR (-v for expanded information):
        Neo4j not found on the classpath

Example arguments for remote:
        -port 1337
        -port 1337 -name shell
        ...or no arguments
Example arguments for local:
        -path /path/to/db
        -path /path/to/db -readonly

駄目だった。

man java (Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle)によると、-jarのオプションを使うと、-cp(-classpath)オプションは無視されるようだ。

このオプションを使用すると、指定した JAR ファイルがすべてのユーザークラスのソースになり、ユーザークラスパスのほかの設定は無視されます。

そこで、代わりに-Xbootclasspath/a:オプションが使える。

ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをセミコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの後ろに追加されます。

$ java -jar neo4j-shell-1.0.jar -path test_db \
> -Xbootclasspath/a:.:../libs/neo4j/neo4j-kernel-1.0/neo4j-kernel-1.0.jar:../libs/neo4j/neo4j-kernel-1.0/geronimo-jta_1.1_spec-1.1.1.jar
NOTE: Connected to local neo4j service at 'test_db'
Welcome to the Neo4j Shell! Enter 'help' for a list of commands
Want bash-like features? throw in jLine (http://jline.sourceforge.net) on the classpath

neo4j-sh (0)$

これでneo4jのシェルが使えるようになった。