Tóm tắt:
tôi đã chạy vào một vấn đề thú vị, và tôi không hoàn toàn chắc chắn làm thế nào để Sleuth nó:Sử dụng trình biên dịch Eclipse thay vì kết quả javac trong vụ tai nạn javadoc
- dự án chúng tôi đã được xây dựng tốt cho tháng
- tôi đã thay đổi
maven-compiler-plugin
sử dụng trình biên dịcheclipse
thay vìjavac
- Bây giờ khi tôi chạy
mvn site
,maven-javadoc-plugin
không - Theo dấu vết ngăn xếp, có vẻ công cụ Javadoc đang gặp sự cố trên tệp lớp được tạo bởi trình biên dịch Eclipse
Có cách nào để sửa lỗi này không? Nếu không, có ít nhất cách nào để gỡ lỗi thêm không?
Chi tiết đầy đủ:
Tôi đang sử dụng Java 1.6.0_27 và Maven 3.0.2.
Tôi đã sử dụng trình biên dịch javac để xây dựng codebase của mình, nhưng tôi muốn thử trình biên dịch Eclipse, vì nó tạo ra cảnh báo tốt hơn nhiều (và có thể cấu hình theo nhiều cách khác).
Vì vậy, tôi đã thay đổi định nghĩa của maven-compiler-plugin
trong pom.xml để:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<compilerId>eclipse</compilerId>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-warn:+boxing,enumSwitch,javadoc,hashCode</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-eclipse</artifactId>
<version>1.8.2</version>
</dependency>
</dependencies>
</plugin>
Trong phần <reporting>
tôi, tôi có:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8</version>
</plugin>
Cho đến nay, như vậy tốt. Tôi đã làm một mvn clean install
và mọi thứ đều tốt đẹp, tất cả các bài kiểm tra đều trôi qua, và mọi thứ đều tuyệt vời.
Nhưng khi tôi cố gắng chạy mvn site
, khi nó được báo cáo Javadoc, nó không thành công với những gì dường như là một tai nạn Javadoc:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.0:site (default-site) on project framework: Error during page generation: Error rendering Maven report:
[ERROR] Exit code: 1 - java.lang.StringIndexOutOfBoundsException: String index out of range: -15
[ERROR] at java.lang.String.substring(String.java:1937)
[ERROR] at java.lang.String.substring(String.java:1904)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.simpleBinaryName(ClassReader.java:958)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readEnclosingMethodAttr(ClassReader.java:930)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readMemberAttr(ClassReader.java:909)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassAttr(ClassReader.java:1053)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassAttrs(ClassReader.java:1067)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClass(ClassReader.java:1560)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassFile(ClassReader.java:1658)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:1845)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:1777)
[ERROR] at com.sun.tools.javac.code.Symbol.complete(Symbol.java:386)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:763)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:695)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.getFlags(ClassDocImpl.java:105)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.isAnnotationType(ClassDocImpl.java:116)
[ERROR] at com.sun.tools.javadoc.DocEnv.isAnnotationType(DocEnv.java:574)
[ERROR] at com.sun.tools.javadoc.DocEnv.getClassDoc(DocEnv.java:546)
[ERROR] at com.sun.tools.javadoc.PackageDocImpl.getClasses(PackageDocImpl.java:154)
[ERROR] at com.sun.tools.javadoc.PackageDocImpl.addAllClassesTo(PackageDocImpl.java:170)
[ERROR] at com.sun.tools.javadoc.RootDocImpl.classes(RootDocImpl.java:178)
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:96)
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64)
[ERROR] at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42)
[ERROR] at com.sun.tools.doclets.standard.Standard.start(Standard.java:23)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597)
[ERROR] at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:269)
[ERROR] at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:143)
[ERROR] at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340)
[ERROR] at com.sun.tools.javadoc.Start.begin(Start.java:128)
[ERROR] at com.sun.tools.javadoc.Main.execute(Main.java:41)
[ERROR] at com.sun.tools.javadoc.Main.main(Main.java:31)
[ERROR]
[ERROR] Command line was: "C:\Program Files (x86)\Java\jdk1.6.0_27\jre\..\bin\javadoc.exe" @options @packages
[ERROR]
[ERROR] Refer to the generated Javadoc files in 'C:\Projects\SMF\framework\target\site\apidocs' dir.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Câu hỏi của tôi:
OK, vì vậy những gì đã thay đổi ? Tất cả trang Javadoc và Maven đều được xây dựng tốt khi tôi sử dụng javac, nhưng ngay sau khi tôi chuyển sang trình biên dịch Eclipse, Javadoc bị treo.
Tệ hơn nữa, nó thậm chí còn không cho tôi biết lớp nào gây ra sự cố, vì vậy tôi thậm chí không biết bắt đầu gỡ lỗi ở đâu.
Rõ ràng, trong thời gian này có nghĩa là tôi sẽ không sử dụng trình biên dịch Eclipse, và tôi sẽ gắn bó với javac. Nhưng tôi tò mò là lý do tại sao điều này đang xảy ra và những gì tôi có thể làm để khắc phục hoặc khắc phục sự cố.
Đây là số lẻ. Có lẽ đó là một vấn đề "mặc định" --- bạn có thể chạy javac với các đối số rõ ràng không? – jayunit100
@ jayunit100: Tôi thực sự không gọi javac chút nào. Dường như công cụ Javadoc đang sử dụng (phần của) javac trong nội bộ, nhưng theo như tôi biết tôi không kiểm soát được điều đó. (Nếu bạn biết một cách, bằng mọi cách, hãy đăng câu trả lời đó!) –
Làm thế nào về việc sử dụng mvnDebug để tìm ra chuỗi ký tự nào đang bừa bộn? Điều đó có thể cho một số đầu mối. –