- PR -

DocletでJDomを使うには

1
投稿者投稿内容
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2005-07-05 23:14


JDOMに限った話では無いかもしれませんが、
JDK 1.4.2でカスタムドックレットからJDOMを使用すると、
以下の例外がスローされます。

コード:
ソースファイル src\JDomDoclet.java を読み込んでいます...
Javadoc 情報を構築しています...
javadoc: doclet クラス JDomDoclet では、メソッド start は例外 java.lang.reflect.
InvocationTargetException をスローしました。
java.lang.IllegalArgumentException
        at sun.net.www.ParseUtil.decode(ParseUtil.java:155)
        at sun.misc.URLClassPath$FileLoader.<init>(URLClassPath.java:860)
        at sun.misc.URLClassPath.run(URLClassPath.java:318)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:312)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:289)
        at sun.misc.URLClassPath.getResource(URLClassPath.java:159)
        at java.net.URLClassLoader.run(URLClassLoader.java:191)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
        at JDomDoclet.start(JDomDoclet.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:193)
        at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:92)
        at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:311)
        at com.sun.tools.javadoc.Start.begin(Start.java:121)
        at com.sun.tools.javadoc.Main.execute(Main.java:41)
        at com.sun.tools.javadoc.Main.main(Main.java:31)



ソースは以下の通りです。

コード:
public class JDomDoclet {
	public static void test(){
		new Document();
	}

	public static boolean start(RootDoc root) {
		return true;
	}
	
	public static void main(String[] args){
		test();
	}
}



実行したコマンドラインは以下の通りです。

javadoc -doclet JDomDoclet -docletpath bin -classpath bin;c:\usr\src\jdom-1.0\build\jdom.jar;%JAVA_HOME%\lib\tools.jar src\JDomDoclet.java

mainメソッドを作って以下のコマンドラインを実行しても例外は投げられません。

C:\eclipse\workspace\doclet-test>java -classpath bin;c:\usr\src\jdom-1.0\build\dom.jar JDomDoclet

職場で試したときはNoClassDefFoundErrorだったのが気になりますが、
とにかくDocletから実行したときのみエラーとなる事には変わりはありません。

もしかして、DocletからはJDK標準のクラスしか使えないのでしょうか?
ご存じの方がおられましたらご教示お願いします。
おしつおされつ
会議室デビュー日: 2005/12/27
投稿数: 2
投稿日時: 2005-12-27 18:27
 使っているクラスパスやjarのパス名をセミコロンで区切って、
-docletpath に 指定してみてはいかがでしょうか。
 以下のような感じです。
  -docletpath bin;jdom.jarのパス名
 NoClassDefFoundErrorは上の方法で回避できました。
以上
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2005-12-28 11:23
なるほど、クラスパスではなくドックレットのパス自体に
含めてしまうのですか・・・。
とりあえず回避策としてはJDomを使う部分を別個の
Antタスクとして作成してしまいました。
また、機会が有れば試してみます。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)