我是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
(我们的代码导入: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页面。任何帮助表示赞赏 - 我们的时间很短。
答案 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;在适合它们时将它们视为内部。在某些情况下,回顾性地。