如何修复 HiveMQ 中未解析的 DaggerSingletonComponent(MQTT 协议)
How to fix DaggerSingletonComponent not resolved in HiveMQ (MQTT protocol)
我尝试先设置创建客户端以测试 MQTT 是否正常工作,然后我将实施 connect() 方法。我下载了最新版本的 HiveMQ(在 Java 中完成的开源 MQTT 实现),在将项目正确导入为 Eclipse 中的 Gradle 构建并使用 GIT 后,我遇到了一个错误信息。它说 "DaggerSingletonComponent cannot be resolved." 我的程序根本不能 运行。
Link到我下载的开源:https://github.com/hivemq/hivemq-mqtt-client
我试过手动编辑构建文件,看看是否有一些代码遗漏了 dagger 的依赖项,但没有。
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
Dagger 是一个在编译时生成依赖注入代码的库。
提到的class是生成的classes之一。
请使用gradle构建项目:
- 打开一个终端
- 导航到项目目录
- 执行
./gradlew build
(Linux/Mac)或gradlew build
(Windows)
您需要确保将目录 build/generated/source/apt/main/
配置为源目录,以便 IDE 获取生成的 classes。
那么在使用 gradle 进行第一次构建后,您应该能够使用 IDE 的构建方法。
我尝试先设置创建客户端以测试 MQTT 是否正常工作,然后我将实施 connect() 方法。我下载了最新版本的 HiveMQ(在 Java 中完成的开源 MQTT 实现),在将项目正确导入为 Eclipse 中的 Gradle 构建并使用 GIT 后,我遇到了一个错误信息。它说 "DaggerSingletonComponent cannot be resolved." 我的程序根本不能 运行。
Link到我下载的开源:https://github.com/hivemq/hivemq-mqtt-client
我试过手动编辑构建文件,看看是否有一些代码遗漏了 dagger 的依赖项,但没有。
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
Dagger 是一个在编译时生成依赖注入代码的库。 提到的class是生成的classes之一。
请使用gradle构建项目:
- 打开一个终端
- 导航到项目目录
- 执行
./gradlew build
(Linux/Mac)或gradlew build
(Windows)
您需要确保将目录 build/generated/source/apt/main/
配置为源目录,以便 IDE 获取生成的 classes。
那么在使用 gradle 进行第一次构建后,您应该能够使用 IDE 的构建方法。