【问题标题】:Quarkus - Unsatisfied dependency between gradle submodulesQuarkus - gradle子模块之间的依赖关系不满足
【发布时间】:2021-02-10 13:08:14
【问题描述】:

我知道在here 描述的直接依赖的情况下,空的beans.xml 可以如何解决问题

问题是当子模块之间的依赖方向相反时,我们如何才能达到类似的结果。 所以基于链接问题的例子 如果不是这个设置会怎样

// service-module build.gradle
dependencies {
   implementation project(":library-module")
}

我们有这个

// library-module build.gradle
dependencies {
   implementation project(":service-module")
}

作为一个用例,考虑一个遵循ports & adapters 架构的服务, 其中端口位于application 模块中,适配器实现位于adapters 模块中。

// application module

public interface WebPort {}

---

@ApplicationScoped
public class AppService {

   @Inject
   WebPort webPort;
   ...
}
//adapters module

// build.gradle
dependencies {
   // this is in order to have the WebPort available
   implementation project(":application")
}

@ApplicationScoped
public class WebAdapter implements WebPort {
    ...
}

目前,此设置会抛出 UnsatisfiedResolutionException,因为应用程序模块无法看到 WebAdapter bean。

是否可以有类似的工作设置?

【问题讨论】:

    标签: gradle dependency-injection cdi quarkus multi-module


    【解决方案1】:

    我已经弄清楚了问题所在。显然在两个模块的 build.gradle 中声明了 quarkus 插件会导致混淆。好像是下面的依赖

    dependencies {
       // this is in order to have the WebPort available
       implementation project(":application")
    }
    

    指示gradle首先开始构建应用程序模块,这是有道理的,但是在这种特定情况下会导致不满足的依赖错误,因为实现bean存在于尚未构建的适配器模块中。

    从应用程序模块中删除 quarkus 插件似乎可以解决问题。或者,可以选择创建包含 2 个原始模块作为依赖项的第 3 个模块,并且仅在此第 3 个模块中具有 quarkus 插件,这可以通过具有以下类作为整个应用程序的入口点,例如:

    @QuarkusMain
    public class Main {
    
        public static void main(String... args) {
            Quarkus.run(args);
        }
    }
    

    上述设置解决了这个问题,但是 Intellij 上仍然存在不满足依赖关系的恼人警告。如果有办法让 Intellij 了解正在发生的事情,那就太好了。对此的任何提示都非常受欢迎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多