在 IntelliJ IDE 2019.3.4 和 JDK GraalVM 20.0.0 和 maven 3.6.3 上运行时发生。
"C:\Program Files\Java\graalvm-ce-java8-20.0.0\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains \IntelliJ IDEA 社区版 2019.3.4\lib\idea_rt.jar=52496:C:\Program Files\JetBrains\IntelliJ IDEA 社区版 2019.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.4\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\emerson.santos\AppData\Local\Temp\idea_classpath268905798 com.intellij.rt.junit .JUnitStarter -ideVersion5 -junit5 com.softexpert.analytics.services.materialization.MaterializationServiceIntegrationTest,test
[INFO] H2 数据库以 TCP 服务器模式启动;服务器状态:TCP 服务器运行在 tcp://10.0.75.1:9092(仅本地连接)
[INFO] H2 数据库被关闭;服务器状态:未启动
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NoSuchMethodException: io.quarkus.runner.bootstrap.AugmentActionImpl.(io.quarkus.bootstrap.app.CuratedApplication, java.util.List )
在 io.quarkus.test.junit.QuarkusTestExtension.beforeEach(QuarkusTestExtension.java:164)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachCallbacks$1(TestMethodTestDescriptor.java:154)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$5(TestMethodTestDescriptor.java:190)
在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:190)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachCallbacks(TestMethodTestDescriptor.java:153)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) … 我正在尝试序列化具有双向关系的实体:
class TypeA {
String name;
TypeB typeB;
}
class TypeB {
String identifier;
TypeA typeA;
}
Run Code Online (Sandbox Code Playgroud)
与杰克逊我解决@JsonBackReference中的TypeB属性和@JsonManagedReference中的typeA属性,但我怎么能做到这一点的JSONB(Eclipse的Yasson实现)?
Caused by: javax.json.bind.JsonbException: Recursive reference has been found in class class xxxxxx.model.Analysis.
at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:76)
at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serialize(AbstractContainerSerializer.java:107)
at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serializerCaptor(AbstractContainerSerializer.java:125)
at org.eclipse.yasson.internal.serializer.ObjectSerializer.marshallProperty(ObjectSerializer.java:121)
at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:69)
... 45 more
Run Code Online (Sandbox Code Playgroud)
OBS:我用 DTO 解决了,但疑问依然存在。
按照 Quarkus Rest Client 教程,我需要在 application.properties 文件中添加类似的内容:
country-api/mp-rest/url=https://restcountries.eu/rest
使用 Docker 它可以工作,我可以通过参数传递属性值:
docker run -it --privileged --rm --env country-api/mp-rest/url="https://restcountries.eu/rest" mydockerhost/my-project:SNAPSHOT
Kubernetes 的 YAML 文件如下所示:
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
labels:
app.kubernetes.io/name: "my-project"
app.kubernetes.io/version: "SNAPSHOT"
name: "my-project-deployment"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: "my-project"
app.kubernetes.io/version: "SNAPSHOT"
template:
metadata:
labels:
app.kubernetes.io/name: "my-project"
app.kubernetes.io/version: "SNAPSHOT"
spec:
containers:
- env:
- name: "country-api/mp-rest/url"
value: "https://restcountries.eu/rest"
Run Code Online (Sandbox Code Playgroud)
但执行命令时出现如下错误kubectl apply -f my-projetc.yaml
The Deployment "my-project-deployment" is invalid:
* spec.template.spec.containers[0].env[1].name: Invalid value: "country-api/mp-rest/url": a valid environment variable name …
在开发过程中,我可能需要向我的项目添加第三方依赖项。在 JVM 模式下它确实有效,但是如何确定哪些依赖项与 Quarkus 本机模式不兼容?