這個可能是是一個doclet實現特定的問題,但我相信它真的是我在這裏處理的一個JavaDoc配置問題。使用特殊文檔運行Javadoc時出現模糊的IOException
我試圖讓yDoc UML Doclet工作,以便它將爲我的Java應用程序生成UML圖,作爲Ant構建的一部分。我下載了該項目(社區版),並試圖修改它們的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
任務,甚至在與-v
說法「詳細」模式下運行的螞蟻,我看到了[ydoc]
在Ant控制檯中調用的任務,後面跟着一條記錄語句,其中顯示「生成Javadoc」,並且從詳細輸出中返回大約20行,並返回參數yDoc
我,然後最後的日誌消息說「Javadoc執行」。然後,以下令人震驚渺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
有沒有什麼辦法讓更多的細節了螞蟻的?找出它在異常中引用的文件或目錄?任何JavaDoc/yDoc大師都曾經遇到過這種情況?我的項目目錄結構是否設置錯誤,或者與Ant構建版本不同?我相信我有我的doclet/path
屬性設置正確,並使用正確的路徑分隔符(我在Ubuntu Linux上)。對於我的生活,我無法弄清楚從哪裏出發,或者如何去診斷這裏的潛在問題!提前致謝!
編輯/更新:
感謝大家迄今的建議。我完全不用Eclipse了(就構建而言,只需從命令行運行Ant;現在就可以了,當我這樣做的時候,我得到了一個成功的構建(所以Eclipse至少部分是罪魁禍首) 。),但仍然沒有yDoc代
現在,當我從與verbos終端運行Ant(-v
)選項,這裏是我所看到的:
數百個外觀相同的警告,但不同類別:
[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
此外,如果被正確執行,它應該是地方所有uml-doclet/
目錄下的JavaDoc在我的項目的根。它沒有這樣的事情!
所以它看起來像有幾個事情在進行:
- 的JavaDoc中不能看到我的第三方的依賴(如Spring,駱駝等);因此數百警告
- 它無法找到的名單我的任何資源記錄
再次,賞金去的人誰可以幫助我得到這個工作。再次感謝所有幫助!
你有自己的Javadoc你的$ PATH? – Thilo
什麼是快速檢查方法?!? – IAmYourFaja
在命令行中鍵入'javadoc'。 – Thilo