これはドックレット実装固有の質問かもしれませんが、ここで扱っているのは本当にJavaDoc構成の問題だと思います。
yDoc UML Docletを機能させて、Antビルドの一部としてJavaアプリのUML図を生成しようとしています。私はプロジェクト(コミュニティ版)をダウンロードし、それらを適応させようとしましたが、それを完全に機能させることbuild-sample.xml
ができません。
これが私のプロジェクトディレクトリ構造です:
MyProject/
src/main/java/
<All the Java sources I want documented and diagrammed>
bin/main
<Compiled binaries of src/main/java/>
lib/
styleed.jar
ydoc.jar
resources/
<All the yDoc resources that came with the download>
umldoclet/
<Where I want all JavaDocs to go>
build.xml
ここにありbuild.xml
ます:
<project name="MyProject" default="ydoc" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:jacoco="antlib:org.jacoco.ant">
<!-- The "compile" task and all its dependencies omitted for brevity,
but they all absolutely work 100% and "compile" places compiled
CLASS files under bin/main. -->
<target name="ydoc" depends="compile">
<property name="ydoc.home" value="${basedir}"/>
<javadoc source="1.5" destdir="./umldoclet" additionalparam="-breakiterator">
<packageset dir="src/main">
<include name="java/**"/>
</packageset>
<doclet name="ydoc.doclets.YStandard" path="${ydoc.home}/lib/ydoc.jar;${ydoc.home}/resources">
<param name="-author"/>
<param name="-generic"/>
<param name="-umlautogen"/>
<param name="-filterpath" value="./lib/ydoc.jar"/>
<param name="-filter" value="ydoc.filters.ExcludeFilter"/>
<param name="-tag" value="y.precondition"/>
<param name="-tag" value="y.postcondition"/>
<param name="-tag" value="y.complexity"/>
<param name="-tag" value="param"/>
<param name="-tag" value="return"/>
<param name="-tag" value="see"/>
<param name="-tag" value="y.uml"/>
</doclet>
</javadoc>
</target>
</project>
タスクを実行すると、引数を指定ydoc
して「verbose」モードでAntを実行していても、Ant Consoleでタスクが呼び出され、その後に「Generating Javadoc」というログステートメントが表示され、詳細出力から約20行が逆流します。paramsが返ってきたら、「Javadocの実行」という最終的なログメッセージが表示されます。次に、次の驚くほど漠然とした:-v
[ydoc]
yDoc
IOException
BUILD FAILED
<my-eclipse-home>/MyProject/build.xml:200: Javadoc failed: java.io.IOException: Cannot run program "javadoc": java.io.IOException: error=2, No such file or directory
at org.apache.tools.ant.taskdefs.Javadoc.execute(Javadoc.java:1765)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
Caused by: java.io.IOException: Cannot run program "javadoc": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
at java.lang.Runtime.exec(Runtime.java:610)
at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:862)
at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:481)
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:495)
at org.apache.tools.ant.taskdefs.Javadoc.execute(Javadoc.java:1759)
... 15 more
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
... 20 more
Antから詳細を取得する方法はありますか?例外で参照しているファイルまたはディレクトリを見つけるには?これまでにJavaDoc/yDocの達人がこれに遭遇したことはありますか?プロジェクトのディレクトリ構造が正しく設定されていませんか、それともAntビルドが探しているものとは異なりますか?私は自分の属性が正しく設定されていて、正しいパスセパレーターを使用していると信じdoclet/path
ています(私はUbuntu Linuxを使用しています)。私の人生では、ここからどこに行くべきか、またはここで根本的な問題を診断する方法を理解することはできません!前もって感謝します!
編集/更新:
これまでの提案に感謝します。私はEclipseを完全に廃止しています(ビルドに関する限り、コマンドラインからAntを実行するだけです。これは今のところ問題ありません。これを行うと、ビルドが成功します(したがって、Eclipseが少なくとも部分的に原因でした) )、ただし、yDocの生成はまだありません。
さて、verbos(-v
)オプションを使用してターミナルからAntを実行すると、次のように表示されます。
同じように見えますが、クラスが異なる何百もの警告:
[javadoc] Constructing Javadoc information...
[javadoc] /<path-to-my-project>/MyProject/src/main/java/com/some/pkg/SomeObject.java:11: package org.springframework.beans.factory.annotation does not exist
[javadoc] import org.springframework.beans.factory.annotation.Autowired;
[javadoc] ^
それらを数百回実行すると、次の出力が得られます(ソースツリー内のすべてのパッケージに対してこれらのうちの1つ)。
[javadoc] javadoc: warning - No source files for package java.com.some.pkg.<whatever>
最後に、冗長ビルド出力の最後のセクション:
[javadoc] Valid license file found.
[javadoc] Registered Filter ydoc.filters.ExcludeFilter ...
[javadoc] Registered Taglet for tag @y.complexity ...
[javadoc] Registered Taglet for tag @y.precondition ...
[javadoc] Registered Taglet for tag @y.postcondition ...
[javadoc] Registered Taglet for tag @y.author ...
[javadoc] 1 error
[javadoc] 109 warnings
[javadoc] javadoc: error - No public or protected classes found to document.
BUILD SUCCESSFUL
Total time: 6 seconds
さらに、正しく実行されていれば、すべてのJavaDocをuml-doclet/
プロジェクトルートのディレクトリの下に配置する必要があります。そんなことはしません!
したがって、さらにいくつかのことが起こっているように見えます。
- JavaDocは、サードパーティの依存関係(Spring、Camelなど)を認識できません。したがって、何百もの警告のリスト
- 文書化するソースが見つかりません
繰り返しになりますが、賞金は私がこれを機能させるのを手伝ってくれる人に与えられます。これまでのすべての助けにもう一度感謝します!