首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JDK8:找回JDK7查找

JDK8:找回JDK7查找
EN

Stack Overflow用户
提问于 2014-07-03 21:17:16
回答 2查看 2.7K关注 0票数 18

与JDK7相比,我发现在JDK8 javadoc中很难读懂新的外观。下面是一个并列的示例。

JDK7:

JDK8:

JDK8占用了相当多的空间。它现在使用以前使用过的DejaVu字体。这可能有很好的理由。我不知道。

我最大的问题是在“参数”和“抛出”部分,参数和它的描述之间不再有任何视觉上的区别。它们都是单倍行距的字体。我认为,用等间距字体书写描述性文本实在太难看了。等间距字体用于标识符的名称、源代码清单等。(你可以不同意)。

我还能在使用JDK8 javadoc工具的同时恢复JDK7风格吗?

我希望是像javadoc -stylesheet jdk7.css这样的东西,其中jdk7.css是包含在JDK8中的东西。此外,如果我决定自己定制css (这不是我的事,但可能没有其他解决方案),我将不愿确保新样式表在企业中的每一台构建服务器上都可用。也许有一个Maven解决方案可以解决这个问题?

可能的解决方案?

有人建议(在下面)将JDK7 javadoc css与Javadoc工具一起使用,看看这是否会带回一些符合JDK8条件的javadoc。

我已经通过检查Apache Commons Lang项目的源代码完成了我的测试。我只使用源代码,而不是他们的POM。这是为了确保我知道我是在正确的基础上工作。

好的,首先--作为参考--这里是由一个全JDK7工具链(JDK7 Javadoc工具,JDK7 css)生成的javadoc。下面是POM代码片段:

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                <stylesheetfile>${basedir}/src/main/css/jdk7javadoc.css</stylesheetfile>  
                <javadocExecutable>C:/Program Files/Java/jdk1.7.0_55/bin</javadocExecutable>   
            </configuration>
        </plugin>
    </plugins>
</build>  

以及由此产生的Javadoc:

接下来,尝试将javadoc css与JDK8 javadoc工具一起使用。下面是POM代码片段:

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                <stylesheetfile>${basedir}/src/main/css/jdk7javadoc.css</stylesheetfile>  
                <javadocExecutable>C:/Program Files/Java/jdk1.8.0_05/bin</javadocExecutable>   
            </configuration>
        </plugin>
    </plugins>
</build>  

以及由此产生的Javadoc:

所以,正如你所看到的,这个策略对我不起作用。

更新

我刚刚意识到,这种更改的结果是在参数描述上使用{@code } (或<code>)标记变得毫无意义。不管怎么说它都不会显示出来。换句话说,如果你过去喜欢这样做的话:

代码语言:javascript
复制
/**
* ...
* @param eName the name for the entity or <code>null</code> to use the default
* ...
*/

这样做已经没有意义了。您的null文本无论如何都不会突出显示出来。

更新2019-04-19

上面提到的部分问题已经在JDK-8072052 : part of list in javadoc should not be in monospace font中修复了。已在Java 9及更高版本中修复,不能向后移植到Java 8。

EN

回答 2

Stack Overflow用户

发布于 2014-10-08 07:27:44

您可以获得标准的JDK8javadoc并很快修复它,然后可以将其放入某个源文件夹中,并告诉stylesheet.css使用它的stylesheetfile选项。这样做的问题是没有向后兼容性的保证,生成的HTML有时会发生很大的变化。这在JDK7和现在的JDK8中都发生过,而且通常你也必须考虑到,仅仅因为JDK 8发布了,一些人可能会用JDK7来构建你的项目……

无论如何,我所做的是检测我们是否在JDK8或更高版本下构建,在这种情况下,我已经在构建时在stylesheet.css上应用了regexp替换。这对我来说很简单,因为这个旧项目使用的是Ant,而不是Maven。为了看看有什么变化,相关的部分是:

代码语言:javascript
复制
<target name="_fixJDK8JavadocCSS" depends="_rawJavadoc" if="atLeastJDK8">
  <property name="file" value="build/api/stylesheet.css" />
  <echo>Fixing JDK 8 CSS in ${file}</echo>

  <!-- Tell that it's modified: -->
  <replaceregexp
      file="${file}" flags="gs" encoding="utf-8"
      match="/\* (Javadoc style sheet) \*/" replace="/\* \1 - JDK 8 usability fix regexp substitutions applied \*/"
  />

  <!-- Remove broken link: -->
  <replaceregexp
      file="${file}" flags="gs" encoding="utf-8"
      match="@import url\('resources/fonts/dejavu.css'\);\s*" replace=""
  />

  <!-- Font family fixes: -->
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="['&quot;]DejaVu Sans['&quot;]" replace="Arial"
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="['&quot;]DejaVu Sans Mono['&quot;]" replace="'Courier New'"
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="['&quot;]DejaVu Serif['&quot;]" replace="Arial"
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="(?&lt;=[\s,:])serif\b" replace="sans-serif"
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="(?&lt;=[\s,:])Georgia,\s*" replace=""
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="['&quot;]Times New Roman['&quot;],\s*" replace=""
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="(?&lt;=[\s,:])Times,\s*" replace=""
  />
  <replaceregexp
      file="${file}" flags="gsi" encoding="utf-8"
      match="(?&lt;=[\s,:])Arial\s*,\s*Arial\b" replace="Arial"
  />

  <!-- "Parameters:", "Returns:", "Throws:", "Since:", "See also:" etc. fixes: -->
  <property name="ddSelectorStart" value="(?:\.contentContainer\s+\.(?:details|description)|\.serializedFormContainer)\s+dl\s+dd\b.*?\{[^\}]*\b" />
  <property name="ddPropertyEnd" value="\b.+?;" />
  <!-- - Put back description (dd) indentation: -->
  <replaceregexp
      file="${file}" flags="gs" encoding="utf-8"
      match="(${ddSelectorStart})margin${ddPropertyEnd}" replace="\1margin: 5px 0 10px 20px;"
  />
  <!-- - No monospace font for the description (dd) part: -->
  <replaceregexp
      file="${file}" flags="gs" encoding="utf-8"
      match="(${ddSelectorStart})font-family${ddPropertyEnd}" replace="\1"
  />
</target>

所以重点是上面的正则表达式,任何人都可以使用antsed、Notepad++等(对于非Ant,不要忘记解析&...;${...}部分)。

我之所以使用regexp,是因为我希望它能够经受住HTML以及标准CSS中的一些变化……但也许我应该只使用生成的CSS,我不知道。或者我应该选择使用一些第三方doclet,这样我就可以控制使用的版本。

票数 1
EN

Stack Overflow用户

发布于 2015-05-27 08:57:39

我使用样式表来覆盖一些Javadoc定义,使其看起来更像JDK7 JDK8。

代码语言:javascript
复制
@import "stylesheetOrig.css";

body {
   font-family: Arial, Helvetica, sans-serif;
   font-size: 12px; }

pre {
   font-family: monospace;
   font-size: 12px; }

code, tt, dt code, table tr td dt code  {
   font-family: monospace;
   font-size: 12px; }

.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
   font-size: 13px; }

.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
   margin-left: 20px;
   font-size: 12px;
   font-family: inherit; }

div.block {
   font-size: 12px;
   font-family: inherit; }

h4 {
   font-size: 15px; }

.memberSummary caption {
   padding-top: 0; }

div.summary th {
   border: 1px solid #9eadc0; }
div.summary td {
   border-left: 1px solid #9eadc0;
   border-right: 1px solid #9eadc0; }
div.summary th.colFirst,
div.summary td.colFirst {
   border-right: none; }
div.summary th.colLast,
div.summary td.colLast {
   border-left: none; }
div.summary table {
   border-bottom: 1px solid #9eadc0;
   margin-bottom: 15px; }
div.summary ul.blockList ul.blockList ul.blockList {
   margin-top: 20px; }
ul.blockList ul.blockList li.blockList,
ul.blockList ul.blockList ul.blockList li.blockList,
ul.blockList ul.blockList ul.blockListLast li.blockList {
   border: 1px solid #9eadc0; }
div.summary ul.blockList ul.blockList ul.blockList li.blockList h3,
div.details ul.blockList ul.blockList ul.blockList li.blockList h4,
div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
   border-bottom: 1px solid #9eadc0; }

我的Ant脚本将原始stylesheet.css重命名为stylesheetOrig.css,并将其替换为新版本(导入原始版本):

代码语言:javascript
复制
<condition property="isJava8">
 <equals arg1="${ant.java.version}" arg2="1.8"/>
</condition>

<target name="-fixupJava8Javadoc" if="isJava8">
 <move file="target/apidocs/stylesheet.css" tofile="target/apidocs/stylesheetOrig.css"/>
 <copy file="src/doc/javadoc8OverrideStylesheet.css" tofile="target/apidocs/stylesheet.css"/>
</target>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24554762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档