平台:Windows 7 x64
JDK版本:7.0.25 x64或7.0.45 x64
JDK安装路径:
C:\Java\jdk725 or default c:\Program Files\Java\jdk1.7.0_25\
Spring Framework版本:3.2.4或3.2.5
UAC:已启用或已停用
gradlew
build(在gradlew
之后):
:referenceHtmlMulti FAILED
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':referenceHtmlMulti'.
Failed to compile stylesheet. 59 errors detected.
Try:
Run with --info or --debug option to get more log output.
Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':referen
ceHtmlMulti'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecute(ExecuteActionsTaskExecuter.java:46)
..
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: javax.xml.transform.TransformerConfigurationException: Failed to comp
ile stylesheet. 59 errors detected.
at com.icl.saxon.PreparedStyleSheet.prepare(PreparedStyleSheet.java:136)
at com.icl.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryI
mpl.java:127)
at com.icl.saxon.TransformerFactoryImpl.newTransformer(TransformerFactor
yImpl.java:79)
..
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:61)
... 70 more
BUILD FAILED
我的问题是:为什么我的构建失败了?
答案 0 :(得分:0)
问题发生在:referenceHtmlMulti任务正在执行。 如果我们查看groovy类,我们将看到XSLT转换用于创建docbook-reference。尽管使用了Saxon(选择了TransformerFactoryImpl),但选择的SAXParserFactory是org.apache.xerces.jaxp.SAXParserFactoryImpl(我想知道为什么不使用com.icl.saxon.aelfred.SAXParserFactoryImpl)。 如果我们看看gradle使用的是xerces的实现,我们将看到xercesImpl-2.9.1.jar,它足够老了。 现在让我们在xerces源代码中找到类URI。它表示统一资源标识符(URI)。在1134行我们可以找到
else if (!isURICharacter(testChar)) {
throw new MalformedURIException(
"Opaque part contains invalid character: " + testChar);
}
现在让我们看一下这个函数是如何工作的:
private static boolean isURICharacter (char p_char) {
return (p_char <= '~' && (fgLookupTable[p_char] & MASK_URI_CHARACTER) != 0);
}
我们可以看到,如果char comparision也会返回true,那么函数将返回true。但这意味着相当接近的字符限制(来自代码0 - 126(〜))。但是非US-ASCII字符集呢?
让我们阅读关于非us-ascii字符的RFC 2396(可以存在于您的Windows路径中,代表您的本地语言,或者可以在帐户名称中找到,其中gradle解包并运行):其他类别 - Unicode字符不是US-ASCII字符集,不是控制字符(根据Character.isISOControl方法),并且不是空格字符(根据Character.isSpaceChar方法)(与RFC 2396的偏差,仅限于US- ASCII)。所有合法URI字符集由未保留,保留,转义和其他字符组成。
因此。 URI标识失败。这就是构建代码失败的地方。
有两种解决方案: