构建Java版TDLib项目时遇Javadoc生成错误求助
解决TDLib Java构建时Javadoc生成失败问题
问题现象
执行构建命令 cmake --build . --target install 后,出现以下错误:
Generating Java TDLib API source files Building Java code C:\Users\T\Desktop\t\td\example\java\org\drinkless\tdlib\Client.java:229: warning: [removal] finalize() in Object has been deprecated and marked for removal protected void finalize() throws Throwable { ^ 1 warning Generating Javadoc documentation Loading source files for package org.drinkless.tdlib... CUSTOMBUILD : error : No source files for package org.drinkless.tdlib [C:\Users\T\Desktop\t\td\example\java\build\generate_javadoc.vcxproj] D:\N\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(247,5): error MSB8066: custom assembly for "C:\Users\T\Desktop\t\td\example\java\build\CMakeFiles\38a1aee34003018bfa3f2a5c470b9fa0\generate_javadoc.rule;C:\Users\T\Desktop\t\td\example\java\CMakeLists.txt" exited with code 2. [C:\Users\T\Desktop\t\td\example\java\build\generate_javadoc.vcxproj]
解决方案
跳过Javadoc生成
如果不需要Javadoc文档,可直接跳过该目标:cmake --build . --target install --exclude-target generate_javadoc或者在CMake配置阶段禁用Javadoc:
cmake -DTD_ENABLE_JAVADOC=OFF ..之后重新执行构建命令。
匹配兼容JDK版本
过高版本的JDK可能会影响Javadoc生成逻辑,建议切换到JDK 11或17版本,再重新构建。手动指定Javadoc源文件路径
若CMake自动检测路径出错,修改example/java/CMakeLists.txt中的Javadoc配置,明确源文件目录:
找到generate_javadoc的自定义目标块,将Javadoc命令修改为:COMMAND ${JAVADOC_EXECUTABLE} -d ${CMAKE_CURRENT_BINARY_DIR}/javadoc ${CMAKE_CURRENT_SOURCE_DIR}/org/drinkless/tdlib/*.java重新运行CMake配置和构建。
消除finalize()警告(可选)
虽然警告不是构建失败的直接原因,但可替换废弃API消除隐患:
将Client.java中的finalize()方法,替换为Cleaner实现:private static final Cleaner cleaner = Cleaner.create(); private final Cleaner.Cleanable cleanable; public Client(...) { // 原有初始化逻辑 this.cleanable = cleaner.register(this, () -> { // 原finalize()中的清理代码 }); } public void close() { cleanable.clean(); }修改后重新构建即可消除警告。
内容的提问来源于stack exchange,提问作者Kikx
相关产品推荐
相关产品推荐

