在Spring中,可以在单独的模块中定义bean依赖项,然后在运行时通过classpath
解析这些依赖项。在Quarkus中有可能做类似的事情吗?
例如,多模块设置如下所示:
- service
- service-test
- service-artifact
在Spring中,可以在服务
模块中定义@配置
,该模块通过其当前上下文的类路径
在运行时解析具体的依赖关系,服务测试
或服务工件
,允许在测试时注入虚拟或测试依赖关系,还有生产人工制品中的真品。
例如,service
中的一个类需要一个某物接口
的实例。某物接口
的实现在-test
或-artiact
模块中定义。service
模块不直接依赖于-test
或-artiact
模块。
一些代码:
在服务
模块中:
@ApplicationScoped
class OrderService(private val repository: OrderRepository) {
fun process(order: Order) {
repository.save(order)
}
}
interface OrderRepository {
fun save(order: Order)
}
在service-test
模块中:
class InMemoryOrderRepository : OrderRepository {
val orders = mutableListOf<Order>()
override fun save(order: Order) {
orders.add(order)
}
}
class OrderServiceTestConfig {
@ApplicationScoped
fun orderRepository(): OrderRepository {
return InMemoryOrderRepository()
}
}
@QuarkusTest
class OrderServiceTest {
@Inject
private lateinit var service: OrderService
@Test
fun `injected order service with resolved repository dependency`() {
// This builds and runs OK
service.process(Order("some_test_order"))
}
}
我曾尝试在Quarkus中复制如上所述的Spring样式设置,但ArC验证在服务
模块的构建上失败,因为未满足解决方案异常
,即使实际使用的所有地方都提供了正确的依赖项;测试成功解析依赖项并通过。
我如何使用Quarkus实现依赖接口与实现的分离,并使ArC验证满意?
(注意:Java和Maven也会出现这种行为。)
我在这里包括了一个maven的例子。请注意,/mvnw安装
失败,出现未满足的解决方案异常
,但可以使用成功构建和运行测试/mvnw测试
。
生成文件:
根项目build。格雷德尔。kts
:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.3.72"
kotlin("plugin.allopen") version "1.3.72"
}
allprojects {
group = "my-group"
version = "1.0.0-SNAPSHOT"
repositories {
mavenLocal()
mavenCentral()
}
}
subprojects {
apply {
plugin("kotlin")
plugin("kotlin-allopen")
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
allOpen {
annotation("javax.ws.rs.Path")
annotation("javax.enterprise.context.ApplicationScoped")
annotation("io.quarkus.test.junit.QuarkusTest")
}
apply {
plugin("kotlin")
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
kotlinOptions.javaParameters = true
}
}
build。格雷德尔。kts
用于服务
:
import io.quarkus.gradle.tasks.QuarkusDev
plugins {
id("io.quarkus") version "1.9.1.Final"
}
apply {
plugin("io.quarkus")
}
dependencies {
implementation(project(":common:model"))
implementation(enforcedPlatform("io.quarkus:quarkus-universe-bom:1.9.1.Final"))
implementation("io.quarkus:quarkus-kotlin")
}
build。格雷德尔。kts
用于维修测试
:
import io.quarkus.gradle.tasks.QuarkusDev
plugins {
id("io.quarkus") version "1.9.1.Final"
}
apply {
plugin("io.quarkus")
}
dependencies {
implementation(project(":service"))
implementation(enforcedPlatform("io.quarkus:quarkus-universe-bom:1.9.1.Final"))
implementation("io.quarkus:quarkus-kotlin")
testImplementation("io.quarkus:quarkus-junit5")
}
尝试使用实例注入(java示例):
import javax.enterprise.inject.Instance;
...
@Inject
Instance<MyBeanClass> bean;
...
bean.get(); // for a single bean
bean.stream(); // for a collection
问题内容: 我想检测模块是否已更改。现在,使用inotify很简单,您只需要知道要从中获取通知的目录即可。 如何在python中检索模块的路径? 问题答案: 实际上,至少在Mac OS X上,将为你提供已加载的.pyc文件的路径。因此,我想你可以这样做: 你也可以尝试: 获取模块的目录。
我的问题似乎类似于运行在Quarkus(gradle)上的多模块项目中的ClassCastException。 不过我用的是maven。我可以确认在使用转轮或测试时没有出现问题。我创建了一个示例应用程序,在https://github.com/AmsterdamFilho/quarkus-poc. 如果在开发模式下运行应用程序,并使用swagger ui或curl执行endpoint,则会出现异常
问题内容: 在我的Go项目中,我想将一些通用功能分解为Go模块,与主项目分开。为了配合go的未来,我正在GOPATH之外进行此操作。我不想在GitHub或其他任何地方发布该模块。 我将这个模块导入主项目的所有尝试导致: 我已经在模块的文件夹中运行了。其文件的内容是: 构建或安装此模块似乎无济于事。我在中没有发现任何迹象。 我尝试了多种导入语句: (模块目录的相对路径) (目录+模块名称的路径) 救
我刚到爪哇。我正在上大学初学者Java课程。我正在运行我的第一个hello world代码,并得到一条错误消息。我已经安装了最新的Dr.Java稳定版本,并安装了Java SE 12 JDK。 我已经卸载和重新安装了几次Dr Java,但仍然收到错误消息。我也重新编译了它,但错误信息仍然存在。 我希望代码输出在interactions窗格下显示“Hello World”,但事实并非如此,而是出现了
在使用Maven一段时间后,我对Maven在构建体系结构中带来的许多特性感到兴奋,尤其是依赖项管理。然而,我一次又一次地遇到了一个问题--Maven如何解决多模块项目之间的依赖关系。我想知道这是否是当前Maven实现的大缺陷和/或是否有任何令人满意的解决方案。 假设我有一个多模块的Maven项目。父pom包含三个模块--moduleA(jar)、moduleB(jar)和moduleC(war)。
问题内容: 面对Jigsaw的相关更改,我似乎找不到任何信息,以了解是否仍然可以在运行时扫描所有可用的类(用于接口,批注等),就像Spring,Reflections和当前其他许多框架和库那样。类的加载方式。 编辑 :此问题是关于 扫描 实际的物理文件路径以查找类。另一个问题是关于动态 加载 类和资源。它是相关的,但 绝不是重复的 。 更新 :Jetty项目已经为此制定了标准化API的 JEP提案