Java 8 jdk 8的Java Doclet API更改

Java 8 jdk 8的Java Doclet API更改,java-8,doclet,Java 8,Doclet,我是Java的新手。我试图升级到jdk 1.8,在执行“gradle测试”时发现以下错误: /u01/sv/home/sv900t1/sv_test/test_Suites/SeleniumLibraries/src/main/java/com/csgi/svtest/selenium/CustomWriter.java:57:错误:找不到符号 h2(“类”+classDoc.toString()); ^ 符号:方法h2(字符串) 地点:CustomWriter类 /u01/sv/home/sv

我是Java的新手。我试图升级到jdk 1.8,在执行“gradle测试”时发现以下错误:

/u01/sv/home/sv900t1/sv_test/test_Suites/SeleniumLibraries/src/main/java/com/csgi/svtest/selenium/CustomWriter.java:57:错误:找不到符号
h2(“类”+classDoc.toString());
^
符号:方法h2(字符串)
地点:CustomWriter类
/u01/sv/home/sv900t1/sv_test/test_Suites/SeleniumLibraries/src/main/java/com/csgi/svtest/selenium/CustomWriter.java:58:错误:找不到符号
printHyperLink(classDoc.toString()+“.html”,“类说明
”,true); ^ 符号:方法printHyperLink(字符串、字符串、字符串、布尔值) 地点:CustomWriter类
我提到

(我们的代码导入:import com.sun.tools.doclets.formats.html.SubWriterHolderWriter;)

并发现许多API,如h2()、printHyperLink()、hr()、table()、tableHeaderStart()、tableHeaderEnd()、tableEnd()、pre()、strong()、preEnd()、ul()、print()、li()、ulEnd()、printHtmlHeader()、center()、today()、printTop()、navLinks()、printBottom()和PrintBodyHtmlLend()都已被删除

是否有一种快速的解决方法可以让我们绕过符号错误? 或者我们应该用现有的API替换缺少的API。作为一名参赛者,这对我来说是一项艰巨的工作。有没有关于如何做到这一点的现有例子?我在网上搜索了很多,但没有找到任何有用的东西


java中的代码用于使用自定义系统测试标记输出Javadoc页面。感谢您的帮助,我们的时间不够

问题出在这里。
com.sun.tools.*
包中的类应视为内部API。Java文档中有明确的警告,指出您不应该编写针对这些API的代码

例如:

在Java 8中,您的代码试图使用的类的头表示:

这不是任何受支持的API的一部分。如果您编写的代码依赖于此,那么您将自担风险。此代码及其内部接口如有更改或删除,恕不另行通知。

(粗体字在原文中!)

它并没有说在Java7中(哎哟!)确实有一些版本的JavadocFAQ似乎鼓励人们重用标准的doclet类。不幸的是,Oracle已经决定关闭这些类,并且还进行了一些破坏性的API更改,以加强这一点,无论更改的目的是否如此

你能做些什么?不幸的是,没有简单的解决方案:

  • 也许你可以找到一个真正的开源Doclet代码库,你可以修改它

  • 也许你可以找到一个商业供应商或顾问来为你做这项工作

  • 或者,您可能只是“吸取教训”,重写代码以使用最新版本的(内部)API。生活在未来你可能需要承受更多痛苦的可能性中

  • 或者。。。您可以在构建/测试箱上重新安装Java7,并(仅)将其用于运行自定义Doclet


更新-已经指出,上面的“规则”适用于
sun.
软件包。然而:

  • 该文档没有提到任何关于
    com.sun.*
    包的内容,因此不能推断它们与
    java.*
    javax.*
    以及其他明确声明为java支持的API保留的包属于同一类别

  • 还有其他明确声明不受支持的
    com.sun.*
    包的示例。例如,甲骨文公司这样说:

    com.sun.media.sound
    软件包是一个内部的、不受支持的软件包,不能由外部应用程序使用

    JDK内部包
    com.sun.corba.se
    和子包已添加到受限包列表中,在使用安全管理器运行时无法直接使用

    此版本中已删除包
    com.sun.mirror
    中包含的apt工具及其相关API


结论,即使没有明确声明
com.sun.*
包是内部的,Oracle现在也很抱歉,但这个答案是不正确的。您将
sun.*
软件包与
com.sun.*
软件包混为一谈,其中有一条众所周知的警告。例如,如果不使用
com.sun.*
,就不可能编写JNDI程序。。。大概但在本例中,类源代码明确警告它不是受支持的API。
/u01/sv/home/sv900t1/sv_test/Test_Suites/SeleniumLibraries/src/main/java/com/csgi/svtest/selenium/CustomWriter.java:57: error: cannot find symbol
        h2("Class "+classDoc.toString());
        ^
  symbol:   method h2(String)
  location: class CustomWriter
/u01/sv/home/sv900t1/sv_test/Test_Suites/SeleniumLibraries/src/main/java/com/csgi/svtest/selenium/CustomWriter.java:58: error: cannot find symbol
        printHyperLink(classDoc.toString()+".html","","Class description<br>",true);
        ^
  symbol:   method printHyperLink(String,String,String,boolean)
  location: class CustomWriter