「これはヤバかったな」という遅刻エピソード

現在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"/>
となっています。

クラスパスの通し方が間違っているのでしょうか…?
何かわかる方がいらっしゃいましたら、教えてください。。。

A 回答 (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 を起動するときのクラスパスに追加した方がよいです。
    • good
    • 0
この回答へのお礼

ありがとうございます!
まったく仰るとおりです。

>フォルダをクラスパスに追加してもだめな場合には、Java を起動する際のカレントディレクトリに vfreport.properties 関係を全部置けば大丈夫なはずです。

初心者なもので、簡単にjarにまとめられるツールがあるとわかり、FatJarを使用してました…。
こちらで実行することができました!!
フォルダをクラスパスに追加してもだめでしたが、
もしFatJarを使わない場合は、自作のマニフェストファイルの
Class-Path:
にすべてのライブラリの相対パスと、
vfreport.properties関係があるディレクトリの相対パスを記述しておけば良いということでしょうか??

お礼日時:2008/10/01 11:50

> フォルダをクラスパスに追加してもだめでしたが、


設定ファイルがあるフォルダをクラスパスに追加する方法はマニュアルに書いてあった方法でしたが、だめでしたか・・・。
過去に同じ問題にはまったときは、カレントディレクトリに配置することで回避していました。

> もしFatJarを使わない場合は、自作のマニフェストファイルの
> :
> vfreport.properties関係があるディレクトリの相対パスを記述しておけば良いということでしょうか??
そうですね。設定ファイルがあるフォルダの相対パスを追加すれば大丈夫だと思います。
一番無難なのは、svf.jar と設定ファイルを同じフォルダに配置し、svf.jar の方だけをクラスパスに追加する方法だと思います。svf.jar と同じフォルダは一番最初に検索されるようですので、あまり悩まずにすむと思います。
    • good
    • 0
この回答へのお礼

詳しい回答をありがとうございます!
SVF関連のjarと設定ファイルが12ファイルくらいあり、
できれば実行アプリケーションを置くフォルダの下に
svfフォルダを作成してその中に設定ファイル等が置ければ
一番わかりやすい状態になると思うので…、
FatJarを使わずにjarにまとめる方法を勉強したいと思います。

ありがとうございました!

お礼日時:2008/10/01 14:24

><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
と記述されているんですよね。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
javaを実行する際のカレントディレクトリにSVF関連のファイルをすべて置いたら実行できました。
初心者なもので、FatJarという簡単なツールを使っていたのですが、
逆にわかりづらくしてしまっていたようです…。
ですが、実行するカレントディレクトリにSVF関連のファイルがすべておいてるというのもわかりづらいように思うので、
もう少し勉強したいと思います。

色々とても勉強になりました!
ありがとうございました!

お礼日時:2008/10/01 11:57

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
のように実行してみましたが、やはりだめでした。

何かおわかりでしょうか?

補足日時:2008/09/28 19:09
    • good
    • 0

アプリの起動はどうやってるんですか・・・



hogehoge部分にアプリのメインクラス名を入れるイメージで書いたのですが・・・

この回答への補足

申し訳ありません。。。

アプリの実行は
java -jar C:\workspace\test\test.jar
としております。
なので、
java -jar C:\workspace\test\test.jar -classpath C:\workspace\test\lib\svf\svf.jar
のように実行してみましたが、同じ結果でした。
まだ間違っていますでしょうか…?

補足日時:2008/09/27 02:22
    • good
    • 0

実行するときの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
・・・・・・

というように表示されました。
何かオプションを指定しないといけないのでしょうか??

補足日時:2008/09/26 19:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報