gpt4 book ai didi

java - 使用Gradle生成JavaDoc,其中换行符位于 "header"

转载 作者:行者123 更新时间:2023-12-01 12:57:29 24 4
gpt4 key购买 nike

更新:在 Gradle 论坛上发帖。请为此问题加注星标,以便得到更多关注 http://gsfn.us/t/4jedo

我正在从主要是 Ant 的构建环境过渡到 Gradle 环境。一个症结是将 Google Analytics 和 Adsense 代码注入(inject) JavaDoc。这是通过将 java 脚本代码放入标题或底部面板中来完成的。有关我当前正在做的事情的示例,请查看这个问题 CDATA .

Gradle 的问题是它无法处理要插入的字符串中的换行符。如果你过滤掉这些字符就会破坏脚本。这是一个代码片段:

task alljavadoc(type: Javadoc) {
source = javadocProjects.collect { project(it).sourceSets.main.allJava }
classpath = files(javadocProjects.collect { project(it).sourceSets.main.compileClasspath })
destinationDir = file("${buildDir}/docs/javadoc")
configure(options) {
header = "this is\na test which should fail"
}
}

关键部分是“header =”。如果删除“\n”字符,它将正常工作。否则,Gradle 进行的对 javadoc 的调用将失败并出现以下错误:

Successfully started process 'command '/opt/jdk/jdk1.7.0_21/bin/javadoc''
javadoc: error - Illegal package name: ""
javadoc: warning - No source files for package a
javadoc: warning - No source files for package test
javadoc: warning - No source files for package which
javadoc: warning - No source files for package should
javadoc: warning - No source files for package fail

我希望包含的实际 java 脚本如下。请注意,我无法通过删除换行符来破解它,因为这会破坏脚本。

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- banner -->
<ins class="adsbygoogle"
style="display:inline-block;width:468px;height:60px"
data-ad-client="ca-pub-xxxxxxxxxxxxxxxxx"
data-ad-slot="xxxxxxxxx"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

作为健全性检查,我还将带有换行符的字符串直接传递给 javadoc (manual)在命令行上,它工作得很好。

javadoc foo.java -header "This is a test
and so is this"

输出 HTML:

<div class="aboutLanguage"><em>This is a test
and so is this</em></div>
</div>

最佳答案

我有一个解释,但除了在 Gradle JIRA 中创建新功能请求之外,我没有其他解决方案。

要生成javadoc Gradle首先会生成所谓的argfile在包含所有单独选项的 build\tmp\javadocTaskName\javadoc.options 处,然后执行 javadoc @full\path\to\build\tmp\javadocTaskName\javadoc.options 命令.

它实际上非常有用,因为您只需从命令行调用 javadoc @javadoc.options 即可调试该文件的内容。

可以通过在多行值内每行末尾使用 \ 字符在 argfile 中定义多行值。

示例header =“这是\na应该失败的测试”结果

-header 'this is
a test which should fail'

但我们需要得到

-header 'this is\
a test which should fail'

告诉 javadoc 该值在下一行继续。

现在的问题是如何在每一行输出\

明显的尝试 header = "this is\\\na test that should failure" 不起作用,它会导致

-header 'this is\\
a test which should fail'

甚至 Groovy 多行或斜杠字符串也不起作用,并且会导致类似的双反斜杠。

因为 Gradle 只是替换选项值中的所有单反斜杠。 JavadocOptionFileWriterContext.writeValue(String)方法是罪魁祸首,尤其是 replaceAll("\\\\", "\\\\\\\\") 行(匹配单反斜杠并将其替换为双反斜杠的正则表达式) .

行内的反斜杠需要进行此转义,但不应转义单个反斜杠后跟新行字符。我的 regex-fu 还不够强大,无法编写这样的模式,但它肯定是可能的。

或者更好的是,该方法内部的转义机制应该用一个反斜杠后跟换行符替换换行符,以隐藏所有这些内容,并允许用户声明多行 javadoc 选项,而无需考虑甚至不知道该功能.

如果有人可以在 Gradle 跟踪器中创建问题,我将不胜感激,因为我无法在当前位置这样做。这句话应该替换为问题的链接,以便有类似问题的人可以投票并跟踪其进展。

关于java - 使用Gradle生成JavaDoc,其中换行符位于 "header",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com