小编Pel*_*cho的帖子

是否有任何方法可以让IntelliJ IDEA识别Java项目中的Dagger 2生成的类?

上下文

我已经在java中启动了一个个人项目Gradle作为构建系统,我想使用Dagger 2作为DI.这样做的主要原因是习惯了该库,并能够在更大的项目中轻松使用它.

我试过了什么

我已设法使用IntelliJ IDEA运行Google示例

问题

IntelliJ IDEA一直告诉我它无法解析生成的类(在本例中DaggerCoffeeApp_Coffee).不知道编写的代码是否正确(特别是在学习使用Dagger 2时),这有点烦人.

所有java类都与Google示例相同.这是我的build.gradle档案:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'com.google.dagger:dagger:2.0.1'
    compile 'com.google.dagger:dagger-compiler:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让IntelliJ IDEA识别DaggerCoffeeApp_Coffee为生成的类(因此可以通过`ctrl + left click实现它的实现)?

java intellij-idea gradle dagger-2

23
推荐指数
3
解决办法
1万
查看次数

仅在达到条件时才链接多个CompletionStage

我有几种CompletionStage方法可以链接.问题是第一个的结果将决定是否应该执行下一个.现在,实现这一目标的唯一方法似乎是将"特殊"参数传递给next,CompletionStage因此它不会执行完整的代码.例如:

public enum SomeResult {
    RESULT_1,
    RESULT_2,
    RESULT_3
}

public CompletionStage<SomeResult> someMethod(SomeArgument someArgument) {

    return CompletableFuture.supplyAsync(() -> {
        // loooooong operation
        if (someCondition)
            return validValue;
        else
            return null;
    }).thenCompose(result -> {
        if (result != null)
            return someMethodThatReturnsACompletionStage(result);
        else
            return CompletableFuture.completedFuture(null);
    }).thenApply(result -> {
        if (result == null)
            return ChainingResult.RESULT_1;
        else if (result.someCondition())
            return ChainingResult.RESULT_2;
        else
            return ChainingResult.RESULT_3;
    });
}
Run Code Online (Sandbox Code Playgroud)

因为整个代码依赖于第一个代码someCondition(如果它是false结果将是RESULT_1,如果不是那么整个代码应该被执行)这个结构对我来说看起来有点难看.有没有办法决定是否应该执行2nd(thenCompose(...))和3rd(thenApply(...))方法?

java-8 completable-future

15
推荐指数
1
解决办法
1万
查看次数

詹金斯将 true 分配给布尔变量并将 false 分配给 def 变量

非常简单直接的问题:

假设我们有这个管道(我认为没有更简单的例子):

node {
    env.someEnvVariable = false

    boolean asBoolean = env.someEnvVariable ?: false
    def asDef         = env.someEnvVariable ?: false

    echo "asBoolean: $asBoolean"   // prints true because of Jenkins
    echo "asDef: $asDef"           // prints false
}
Run Code Online (Sandbox Code Playgroud)

为什么????

将变量定义为boolean使 Jenkins 为其分配一个真值,但将其定义为def将其分配为真正的假值

詹金斯的true价值从何而来?

编辑:另一个例子:

node {
    env.someEnvVariable = false
    boolean someBoolean = false
    def someVar = false

    echo "envVar: ${env.someEnvVariable}"     // prints false
    echo "someBoolean: ${someBoolean}"        // prints false
    echo "someVar: ${someVar}"                // prints false
    if (env.someEnvVariable …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline

5
推荐指数
1
解决办法
1万
查看次数

Kafka Connect无法使用主题策略

语境

我编写了几个小型的Kafka Connect连接器。一个每秒仅生成随机数据,另一个每秒将其记录在控制台中。它们与Schema Registry集成在一起,因此可以使用Avro序列化数据。

我使用Landoop提供fast-data-dev Docker映像将它们部署到本地Kafka环境中

基本设置有效,并每秒产生一条记录的消息

但是,我想更改主题名称策略。默认一生成两个主题:

  • ${topic}-key
  • ${topic}-value

根据我的用例,我将需要生成具有不同模式的事件,这些事件最终会出现在同一主题上。因此,我需要的主题名称是:

  • ${topic}-${keyRecordName}
  • ${topic}-${valueRecordName}

根据文档,我的需求适合TopicRecordNameStrategy

我尝试了什么

我创建avroData用于发送值进行连接的对象:

class SampleSourceConnectorTask : SourceTask() {

    private lateinit var avroData: AvroData 

    override fun start(props: Map<String, String>) {
        [...]
        avroData = AvroData(AvroDataConfig(props))
    }
Run Code Online (Sandbox Code Playgroud)

然后用它来创建SourceRecord响应对象

该文档指出,为了在Kafka Connect中使用架构注册表,我必须在连接器配置中设置一些属性。因此,当我创建它时,将它们添加:

name=SampleSourceConnector
connector.class=[...]
tasks.max=1
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
key.subject.name.strategy=io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
value.subject.name.strategy=io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
Run Code Online (Sandbox Code Playgroud)

问题

连接器似乎忽略了这些属性,并继续使用旧的${topic}-key${topic}-value主题。

Kafka Connect应该支持不同的主题策略。我设法通过编写自己的版本AvroConverter和硬编码来解决此问题,该主题策略是我所需要的。但是,这似乎不是一种好方法,并且在尝试使用Sink …

avro apache-kafka apache-kafka-connect confluent-schema-registry

0
推荐指数
1
解决办法
658
查看次数