- ベストアンサー
SVFの設定について:クラスパスが通ってない?
現在SVF(v6.2c)を使ってアプリを開発しております。 Webアプリケーションではなく、普通(?)のjavaのアプリです。 eclipseで開発しており、eclipseから実行すると無事PDFが出力されるのですが、 アプリをjarにかためてコマンドで実行すると、 「vfreport.properties not found (use default properties)」 というエラーで実行できません。(エラーコードはcode:[-1]です) 調べてパスが通っていないのだとわかったので、 実行PCの環境変数CLASSPATHにsvf.jarを追加したのですが、 それでも同じエラーで実行できません。 追加したパスは、 C:\SVFJP\svfjpd\lib\svf.jar です。 eclipseの.classpathでのsvf関連のものは、 <classpathentry kind="lib" path="lib/svf/BSPro.jar"/> <classpathentry kind="lib" path="lib/svf/svfpstat.jar"/> <classpathentry sourcepath="lib/svf/svfpstat.jar" kind="lib" path="lib/svf/svf.jar"/> となっています。 クラスパスの通し方が間違っているのでしょうか…? 何かわかる方がいらっしゃいましたら、教えてください。。。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
svf.jar ということは、「SVF for Java Print」を使用していると思います。 その場合でしたら、「vfreport.properties が存在するディレクトリ」をクラスパスに追加すれば読み込んでくれるはずです。 FatJar を使って svf.jar を含めてしまった場合、「svf.jar をクラスパスに追加する」ではだめです。 フォルダをクラスパスに追加してもだめな場合には、Java を起動する際のカレントディレクトリに vfreport.properties 関係を全部置けば大丈夫なはずです。 ちなみに、SVF ライブラリを使用する場合には、設定ファイルは基本的にライブラリと同じフォルダに置くことになっていると思います。 SVF では自身のライブラリの位置を jar プロトコルを分解してネイティブパスを特定し、同じフォルダにある設定ファイルを使用しようとします。 このため FatJar のような Jar in Jar タイプの場合、自身のライブラリの位置をネイティブパス上に特定出来なくなりますので使わない方が無難です。 使う場合には、SVF 関係のライブラリを含めずに、Java を起動するときのクラスパスに追加した方がよいです。
その他の回答 (5)
- azumaiya
- ベストアンサー率100% (5/5)
> フォルダをクラスパスに追加してもだめでしたが、 設定ファイルがあるフォルダをクラスパスに追加する方法はマニュアルに書いてあった方法でしたが、だめでしたか・・・。 過去に同じ問題にはまったときは、カレントディレクトリに配置することで回避していました。 > もしFatJarを使わない場合は、自作のマニフェストファイルの > : > vfreport.properties関係があるディレクトリの相対パスを記述しておけば良いということでしょうか?? そうですね。設定ファイルがあるフォルダの相対パスを追加すれば大丈夫だと思います。 一番無難なのは、svf.jar と設定ファイルを同じフォルダに配置し、svf.jar の方だけをクラスパスに追加する方法だと思います。svf.jar と同じフォルダは一番最初に検索されるようですので、あまり悩まずにすむと思います。
お礼
詳しい回答をありがとうございます! SVF関連のjarと設定ファイルが12ファイルくらいあり、 できれば実行アプリケーションを置くフォルダの下に svfフォルダを作成してその中に設定ファイル等が置ければ 一番わかりやすい状態になると思うので…、 FatJarを使わずにjarにまとめる方法を勉強したいと思います。 ありがとうございました!
- ProKaseifu
- ベストアンサー率51% (98/192)
><classpathentry kind="lib" path="lib/svf/BSPro.jar"/> ><classpathentry kind="lib" path="lib/svf/svfpstat.jar"/> ↑もclasspathに追加してみてはどうでしょうか。 あと、起動するjarはmain.jarなのでは? main.jarのmanifestに Main-Class: jp.co.test.mainClass と記述されているんですよね。
お礼
ありがとうございます!! javaを実行する際のカレントディレクトリにSVF関連のファイルをすべて置いたら実行できました。 初心者なもので、FatJarという簡単なツールを使っていたのですが、 逆にわかりづらくしてしまっていたようです…。 ですが、実行するカレントディレクトリにSVF関連のファイルがすべておいてるというのもわかりづらいように思うので、 もう少し勉強したいと思います。 色々とても勉強になりました! ありがとうございました!
- ProKaseifu
- ベストアンサー率51% (98/192)
manifestファイルでメインクラス指定してますよね?
補足
ご連絡が遅くなり申し訳ありません。。。 その後色々試していますが、やはり同じエラーです…。 jarファイルにまとめる方法として、 Fat Jarというeclipseのプラグインを用いています。 それで作成したjarを解凍してみると、manifestファイルもあり以下のようになっていました。 test.jarを解凍↓ ┗ test ┣ /com ┣ /lib(各jarファイル) ┃ ┣ svf.jar ┃ ┣ svfpstat.jar ┃ ┣ ・ ┃ ┣ ・ ┃ ┣ ・ ┃ ┗ ・ ┃ ┣ /main(下記参照) ┃ ┗ /main.jar ┃ ┣ /META-INF(Fat JarのMANIFESTファイルのようです) ┃ ┗ MANIFEST.MF ┃ ┣ doc ┗ OneJar.class main.jarを解凍↓ ┗ main ┣ /jp ┃ ┗ /co ┃ ┗ 以下ソースファイル ┃ ┣ /META-INF ┃ ┗ MANIFEST.MF ┃ ┗ XXXXXX.properties(プロパティファイルがいくつか) test.jarの方のMANIFEST.MFには、 --------------------------------------------- Manifest-Version: 1.0 Created-By: Fat Jar/One-JAR Eclipse Plug-In Main-Class: com.simontuffs.onejar.Boot --------------------------------------------- とFatJar用の(?)MANIFESTファイルになっており、 main.jarの方のMANIFEST.MFには、 --------------------------------------------- Created-By: Fat Jar/One-JAR Eclipse Plug-In Main-Class: jp.co.test.mainClass --------------------------------------------- のようにメインクラスが指定されています。 そこで、 java -jar C:\workspace\test\test.jar -classpath C:\workspace\test\lib\svf.jar のように実行してみましたが、やはりだめでした。 何かおわかりでしょうか?
- ProKaseifu
- ベストアンサー率51% (98/192)
アプリの起動はどうやってるんですか・・・ hogehoge部分にアプリのメインクラス名を入れるイメージで書いたのですが・・・
補足
申し訳ありません。。。 アプリの実行は java -jar C:\workspace\test\test.jar としております。 なので、 java -jar C:\workspace\test\test.jar -classpath C:\workspace\test\lib\svf\svf.jar のように実行してみましたが、同じ結果でした。 まだ間違っていますでしょうか…?
- ProKaseifu
- ベストアンサー率51% (98/192)
実行するときのclasspathにsvfのjarファイルのpathを通さないとダメな気がします。 java hogehoge -classpath svfのpath のようなかんじで。
補足
早々のご回答ありがとうございます! 実行するときのclasspath…。 java -classpath C:\SVFJP\svfjpd\lib\svf.jar と実行してみましたが、 Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM ・・・・・・ というように表示されました。 何かオプションを指定しないといけないのでしょうか??
お礼
ありがとうございます! まったく仰るとおりです。 >フォルダをクラスパスに追加してもだめな場合には、Java を起動する際のカレントディレクトリに vfreport.properties 関係を全部置けば大丈夫なはずです。 → 初心者なもので、簡単にjarにまとめられるツールがあるとわかり、FatJarを使用してました…。 こちらで実行することができました!! フォルダをクラスパスに追加してもだめでしたが、 もしFatJarを使わない場合は、自作のマニフェストファイルの Class-Path: にすべてのライブラリの相対パスと、 vfreport.properties関係があるディレクトリの相対パスを記述しておけば良いということでしょうか??