运行StringIndexOutOfBoundsException
时,我总是遇到mvn javadoc:javadoc
问题。有人知道这个错误吗?下面是完整的堆栈跟踪:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Java Tool 0.2
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-javadoc-plugin:2.9:javadoc (default-cli) @ osgl-tool >>>
[INFO]
[INFO] --- maven-enforcer-plugin:1.0:enforce (enforce-maven) @ osgl-tool ---
[INFO]
[INFO] <<< maven-javadoc-plugin:2.9:javadoc (default-cli) @ osgl-tool <<<
[INFO]
[INFO] --- maven-javadoc-plugin:2.9:javadoc (default-cli) @ osgl-tool ---
[INFO]
Loading source files for package org.osgl.exception...
Loading source files for package org.osgl.util.algo...
Loading source files for package org.osgl.util...
Loading source files for package org.osgl.web.util...
Loading source files for package org.osgl...
Constructing Javadoc information...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.890s
[INFO] Finished at: Tue Feb 18 21:05:48 EST 2014
[INFO] Final Memory: 10M/242M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:javadoc (default-cli) on project osgl-tool: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - java.lang.StringIndexOutOfBoundsException: String index out of range: -22
[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:384)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:766)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:698)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.getFlags(ClassDocImpl.java:103)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.isAnnotationType(ClassDocImpl.java:114)
[ERROR] at com.sun.tools.javadoc.DocEnv.isAnnotationType(DocEnv.java:572)
[ERROR] at com.sun.tools.javadoc.DocEnv.getClassDoc(DocEnv.java:544)
[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: R:\jdk\jre\..\bin\javadoc.exe @options @packages
[ERROR]
[ERROR] Refer to the generated Javadoc files in 'c:\p\java-tool\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
备注
<excludePackageNames>org.osgl:org.osgl.util</excludePackageNames>
删除了问题包。尝试从pom.xml中取出该行并再次运行mvn clean package -Pdist
以重现javadoc问题_
作为underscore.js项目之后的班级名称。它用于将一些常见的实用程序聚合到一个类似于元的命名空间中。对于不喜欢的人,只需使用Osgl
替换_
,因为他们互为别名答案 0 :(得分:2)
您的问题出在您的pom.xml文件中。您声明org.osgl:osgl-storage
依赖项依赖于org.osgl:osgl-tool
- 与您尝试构建的项目相同,但版本不同。排除这种传递依赖,它应该有效。
<dependency>
<groupId>org.osgl</groupId>
<artifactId>osgl-storage</artifactId>
<version>0.3-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.osgl</groupId>
<artifactId>osgl-tool</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:1)
如果你执行mvn dependency:tree
,你会看到org.osgl:osgl-storage:jar:0.3-SNAPSHOT带来了org.osgl:osgl-tool:jar:0.3-SNAPSHOT作为依赖,将与您自己的同一工件版本冲突。
[INFO] org.osgl:osgl-tool:jar:0.4.1-SNAPSHOT
[INFO] +- junit:junit:jar:4.10:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.1:test
[INFO] +- commons-codec:commons-codec:jar:1.8:compile
[INFO] +- com.carrotsearch:junit-benchmarks:jar:0.7.2:test
[INFO] \- org.osgl:osgl-storage:jar:0.3-SNAPSHOT:provided
[INFO] +- org.osgl:osgl-tool:jar:0.3-SNAPSHOT:provided
[INFO] \- org.osgl:osgl-logging:jar:0.2:provided
您需要做的就是告诉Maven排除这种传递依赖:
<dependency>
<groupId>org.osgl</groupId>
<artifactId>osgl-storage</artifactId>
<version>0.3-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.osgl</groupId>
<artifactId>osgl-tool</artifactId>
</exclusion>
</exclusions>
</dependency>
发生了什么事情你有两个版本的同一个工件(你的0.4.1-SNAPSHOT和另一个0.3-SNAPSHOT版本)。上面的解决方案排除了org.osgl传递的0.3-SNAPSHOT版本:osgl-storage:jar:0.3-SNAPSHOT。
您还通过使org.osgl:osgl-tool依赖于org.osgl:osgl-storage创建了cyclic dependency,因为org.osgl:osgl-storage最初依赖于org.osgl:osgl-tool
org.osgl:osgl-storage <──┐ ... you added this dependency
│ │
└──> org.osgl:osgl-tool
您的org.osgl.util.IO
课程取决于org.osgl.storage.ISObject
和org.osgl.storage.impl.SObject
。如果您不想要进一步的问题,则应该避免循环依赖。
编辑:关于_
类,它有一个有效的名称。但是,如果使用这样的名称来避免重复长类名称,例如:
void foo(_.Func2<Integer, String> f) {
F2<Integer, String> newF = _.f2(f);
...
}
然后您应该考虑重命名该类并使用static imports:
import static org.osgl.Osgl.*; // Osgl instead of _
void foo(Func2<Integer, String> f) { // Func2 statically imported
F2<Integer, String> newF = f2(f); // f2 statically imported
...
}