jdk 8

时间:2015-12-15 11:33:20

标签: 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: 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

我提到http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java/

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java/

(我们的代码导入: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()和printBodyHtmlEnd()已被删除。

是否有快速解决方法可以让我们绕过符号错误? 或者我们应该用现有的api替换丢失的api。这对我来说看起来很多 - 作为一个参赛者。有关于如何做到这一点的现有例子吗?我在互联网上搜索了很多,但找不到任何有用的东西。

CustomWriter.java中的代码用于使用自定义系统测试标记输出Javadoc页面。任何帮助表示赞赏 - 我们的时间很短。

1 个答案:

答案 0 :(得分:1)

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

例如:

在Java 8中,代码尝试使用的类的标题是:

  

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

(粗体是原始的!)

它没有说在Java 7中(哎哟!)确实有一些Javadoc FAQ的版本似乎鼓励人们重用标准的doclet类。不幸的是,甲骨文已经决定关闭这些类,并且还进行了一些破坏性的API更改,这加强了这一点,无论这是否是更改的意图

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

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

  • 也许您可以找到一位商业供应商或顾问,为您完成这项工作。

  • 或许您只是“吮吸”并重写您的代码以使用最新版本的(内部)API。并且有可能在将来可能需要承受更多的痛苦。

  • 或者......您可以在构建/测试框中重新安装Java 7并使用它(仅)来运行自定义doclet。

更新 - 已经指出上面的“规则”适用于sun.*个包。但是:

  • 该文档未对com.sun.*个软件包发表任何内容,因此无法推断它们属于java.*javax.*和其他类别的其他类别明确声明为Java支持的API保留。

  • 明确声明不支持com.sun.*个包的其他示例。例如,Oracle的"Compatibility Guide for Java 8"说的是这样的:

      

    com.sun.media.sound包是一个内部的,不受支持的包,不适合外部应用程序使用。

         

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

         

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

结论,即使没有明确声明com.sun.*包是内部的,Oracle也是&gt;&gt;现在&lt;&lt;在适合它们时将它们视为内部。在某些情况下,回顾性地。