You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:45:14