Linuxでxalanのエラー Exception in thread "main" java.lang.NoClassDefFoundError

2012年12月7日金曜日 - 投稿者 さい 時刻: 10:02
Linuxサーバでxmlをhtml変換するのにxalanを使ってみたのですが、コマンドの実行時でこのエラーが表示されて苦労しました。

[root@localhost ~]# java org.apache.xalan.xslt.Process -in sample.xml -xsl sample.xsl -out output.html
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xalan/xslt/Process
Caused by: java.lang.ClassNotFoundException: org.apache.xalan.xslt.Process
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.apache.xalan.xslt.Process.  Program will exit.

PATHが通ってないので怒られているらしい。
だけれどもxalanの実行ディレクトリにはPATHは通っている。
色々調べた結果、結局実行ファイルのxalan.jarそのものに「クラスパス」を通さないとならないということを知りました。
説明に「クラスパス」に通す、とあったのですが、私はjavaは全く明るくないため、実行フォルダだけでいいのかなと思っていたのが敗因。

以下の用にクラスパスをセットして再度実行したところ、無事に成功。

[root@localhost ~]# CLASSPATH=/usr/local/apache2/htdocs/todoxweb/xalan/xalan.jar
[root@localhost ~]# export CLASSPATH=$CLASSPATH:.
[root@localhost ~]# echo $CLASSPATH
/usr/local/apache2/htdocs/todoxweb/xalan/xalan.jar:.

あるいはコマンド実行時にクラスパスまで指定する。

[root@localhost ~]# java -classpath  /usr/share/xalan/xalan.jar org.apache.xalan.xslt.Process -in sample.xml -xsl sample.xsl -out output.html