1

我正在尝试首先设置创建客户端以测试 MQTT 是否可以正常工作,然后我将实现 connect() 方法。我下载了最新版本的 HiveMQ(用 Java 完成的开源 MQTT 实现),在将项目正确导入为 Eclipse 中的 Gradle 构建并使用 GIT 后,我收到了一条错误消息。它说“DaggerSingletonComponent 无法解析”。我的程序根本无法运行。

我下载的开源链接:https ://github.com/hivemq/hivemq-mqtt-client

我尝试手动编辑构建文件以查看依赖项中是否有一些代码遗漏了匕首,但没有。

package com.hivemq.client.internal.mqtt.ioc;

import com.hivemq.client.internal.mqtt.netty.NettyEventLoopProvider;
import com.hivemq.client.internal.mqtt.netty.NettyModule;
import dagger.Component;
import org.jetbrains.annotations.NotNull;

import javax.inject.Singleton;

/**
 * Singleton component for all clients. It exists the whole application lifetime.
 *
 * @author Silvio Giebl
 */
@Component(modules = {NettyModule.class})
@Singleton  
public interface SingletonComponent {

    @NotNull SingletonComponent INSTANCE = DaggerSingletonComponent.create();

    @NotNull ClientComponent.Builder clientComponentBuilder();

    @NotNull NettyEventLoopProvider nettyEventLoopProvider();
}


__________________________
For the module: NettyModule.class


package com.hivemq.client.internal.mqtt.netty;

import dagger.Module;

import dagger.Provides;
import io.netty.channel.epoll.Epoll;
import io.netty.channel.epoll.EpollEventLoopGroup;
import io.netty.channel.epoll.EpollSocketChannel;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import org.jetbrains.annotations.NotNull;

import javax.inject.Singleton;

/**
 * @author Silvio Giebl
 */
@Module
public abstract class NettyModule {

    @Provides
    @Singleton
    static @NotNull NettyEventLoopProvider provideNettyEventLoopProvider() {
        if (Epoll.isAvailable()) {
            return new NettyEventLoopProvider(EpollEventLoopGroup::new, EpollSocketChannel::new);
        } else {
            return new NettyEventLoopProvider(NioEventLoopGroup::new, NioSocketChannel::new);
        }
    }
}

错误消息:DaggerSingletonComponent 无法解析

4

1 回答 1

3

Dagger 是一个在编译时生成依赖注入代码的库。提到的类是生成的类之一。

请使用 gradle 构建项目:

  1. 打开终端
  2. 导航到项目目录
  3. 执行./gradlew build(Linux/Mac) 或gradlew build(Windows)

您需要确保将该目录build/generated/source/apt/main/配置为源目录,以便 IDE 拾取生成的类。

然后您应该能够在第一次使用 gradle 构建之后使用 IDE 的构建方法。

于 2019-06-04T20:48:57.673 回答