Quarkus - gradle 子模块之间的不满足依赖关系
Quarkus - Unsatisfied dependency between gradle submodules
我知道空的 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。
是否可以有类似的工作设置?
我已经弄清楚问题出在哪里了。显然,在两个模块的 build.gradle 中都声明了 quarkus 插件会导致混淆。好像是下面的依赖
dependencies {
// this is in order to have the WebPort available
implementation project(":application")
}
指示 gradle 首先开始构建应用程序模块,这是有道理的,但在这种特定情况下会导致未满足的依赖项错误,因为实现 bean 存在于尚未构建的适配器模块中。
从应用程序模块中删除 quarkus 插件似乎可以解决问题。或者,可以选择创建第 3 个模块,其中包含 2 个原始模块作为依赖项,并且仅在第 3 个模块中具有 quarkus 插件,它可以通过以下 class 作为整个应用程序的入口点,例如:
@QuarkusMain
public class Main {
public static void main(String... args) {
Quarkus.run(args);
}
}
以上设置解决了这个问题,但 Intellij 上仍然存在不满足依赖项的恼人警告。如果有一种方法可以让 Intellij 了解正在发生的事情,那就太好了。对此的任何提示都非常受欢迎。
我知道空的 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。
是否可以有类似的工作设置?
我已经弄清楚问题出在哪里了。显然,在两个模块的 build.gradle 中都声明了 quarkus 插件会导致混淆。好像是下面的依赖
dependencies {
// this is in order to have the WebPort available
implementation project(":application")
}
指示 gradle 首先开始构建应用程序模块,这是有道理的,但在这种特定情况下会导致未满足的依赖项错误,因为实现 bean 存在于尚未构建的适配器模块中。
从应用程序模块中删除 quarkus 插件似乎可以解决问题。或者,可以选择创建第 3 个模块,其中包含 2 个原始模块作为依赖项,并且仅在第 3 个模块中具有 quarkus 插件,它可以通过以下 class 作为整个应用程序的入口点,例如:
@QuarkusMain
public class Main {
public static void main(String... args) {
Quarkus.run(args);
}
}
以上设置解决了这个问题,但 Intellij 上仍然存在不满足依赖项的恼人警告。如果有一种方法可以让 Intellij 了解正在发生的事情,那就太好了。对此的任何提示都非常受欢迎。