我正在尝试使用Quarkus native构建我的AWS Lambda。
我的设置是:
当我跑步时
docker run -v /home/mypc/dev/java/quarkus/alexa_swear/target/<my project>-1.0-SNAPSHOT-native-image-source-jar:/project:z --user 1000:1000 --rm quay.io/quarkus/ubi-quarkus-native-image:19.2.1 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\$BySpaceAndTime -jar <my project>-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+AddAllCharsets -H:EnableURLProtocols=http -H:-JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace <my project>-1.0-SNAPSHOT-runner
我得到以下错误:
[alexa_swear-1.0-SNAPSHOT-runner:23] (typeflow): 52,070.99 ms
[alexa_swear-1.0-SNAPSHOT-runner:23] (objects): 25,961.57 ms
[alexa_swear-1.0-SNAPSHOT-runner:23] (features): 803.41 ms
[alexa_swear-1.0-SNAPSHOT-runner:23] analysis: 81,015.48 ms
[alexa_swear-1.0-SNAPSHOT-runner:23] (clinit): 1,277.52 ms
[alexa_swear-1.0-SNAPSHOT-runner:23] universe: 4,416.32 ms
Error: Unsupported features in 5 methods
Detailed message:
Call path from entry point to java.lang.Runtime.traceInstructions(boolean):
at java.lang.Runtime.traceInstructions(Runtime.java)
at com.oracle.svm.reflect.Runtime_traceInstructions_91eaacf084b9d7e2af6dcc0028ee87fea9223b51_77.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.net.www.protocol.http.NTLMAuthenticationProxy.isTrustedSite(NTLMAuthenticationProxy.java:102)
at sun.net.www.protocol.http.HttpURLConnection.getServerAuthentication(HttpURLConnection.java:2481)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1743)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder$2.run(AmazonLambdaRecorder.java:171)
at java.lang.Thread.run(Thread.java:748)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:460)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0) ... 6 more
Error: Image build request failed with exit status 1
上述错误被截断:相同的调用堆栈指向不同的不受支持的方法,例如java.lang.Thread.stop
。
我的基本理解是,io.quarkus.amazon.lambda.runtime.Amazon LambdaRecorder$2.run(Amazon LambdaRecorder.java
正在引用一些不受支持的方法,例如java.lang.Thread.resume()
。我也尝试过Quarkus19.2.1,但没有成功。
上面的命令是由mvn干净安装-Pnate-Dnative-image.docker-build=true-e
执行的。
我终于找到了问题的原因。
在我的代码的非工作版本中,我使用了com的工厂。亚马逊。问AlexaSkill以某种方式注入入口点,如下所示:
package io.mirko.lambda;
import com.amazon.ask.AlexaSkill;
import com.amazon.ask.Skills;
import com.amazon.ask.dispatcher.request.handler.HandlerInput;
import com.amazon.ask.dispatcher.request.handler.RequestHandler;
import com.amazon.ask.model.RequestEnvelope;
import com.amazon.ask.model.ResponseEnvelope;
import com.amazon.ask.request.interceptor.GenericRequestInterceptor;
import io.mirko.lambda.handlers.*;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.*;
import java.util.stream.StreamSupport;
public class SkillFactory {
@Inject
Instance<RequestHandler> handlers;
@Produces
@ApplicationScoped
@Named
public AlexaSkill<RequestEnvelope, ResponseEnvelope> createSkill() {
return Skills.standard()
.addRequestHandlers(handlers.stream().toArray(RequestHandler[]::new))
.addRequestInterceptor(new GenericRequestInterceptor<HandlerInput>() {
@Override
public void process(HandlerInput handlerInput) {
System.out.format("Processing %s\n", handlerInput.getRequest());
}
})
// Add your skill id below
//.withSkillId("")
.build();
}
}
...
public class SwearStreamLambda extends SkillStreamHandler {
@Named("swearStream")
public SwearStreamLambda() {
//noinspection unchecked
super((AlexaSkill<RequestEnvelope, ResponseEnvelope>)
getBean(new ParameterizedTypeImpl(AlexaSkill.class, RequestEnvelope.class, ResponseEnvelope.class)));
通过删除SkillFactory类并将其逻辑移到SwearStreamLambda类中,编译进行得很顺利。
一些注意事项:
总而言之,我找不到问题的根本原因,但我认为我的问题已经解决了。
P、 在美国,最初的问题可以通过以下方式消除:
mvn干净的安装native-image.docker
请参见<代码>https://github.com/quarkusio/quarkus/issues/6395#issuecomment-570755587。
这并不能解决所有问题,因为必须配置Quarkus反射,但它解决了具体问题。
现在我们将探索云原生应用架构的几个主要特征,和这些特征是如何解决我们前面提到的使用云原生应用架构的动机。 12因素应用 12因素应用是一系列云原生应用架构的模式集合,最初由Heroku提出。这些模式可以用来说明什么样的应用才是云原生应用。它们关注速度、安全、通过声明式配置扩展、可横向扩展的无状态/无共享进程以及部署环境的整体松耦合。如Cloud Foundry、Heroku和Amazon Elas
我只是想知道是否有人知道可能导致以下错误的原因? 之前没有任何问题,但是在mate添加了单独的文件夹进行调试并测试到之后,它开始了。 错误:无法处理文件 C:\Users...\node_modules\react-native-android-snackbar\android\build\intermediates\exploded-aar\com.android.support\appcomp
当我尝试使用 离子科尔多瓦构建Android 突然我面临这个错误 未找到已安装的构建工具。安装Android构建工具版本19.1.0或更高版本。0 我确定Android Studio版本(2.1.1 - 22.0.0 - 23.0.0)和最新版本26.0.1的android构建工具 科尔多瓦要求的输出 android的要求检查结果:Java JDK:已安装1.8.0 Android SDK:已安装
我使用Spring AOP在我们的应用程序中触发指标。我已经创建了一个注释,其中有一个与之关联的建议。除了在原型bean上调用方法的情况之外,所有标记为的方法都可以很好地调用该建议。 注释具有 PointCut表达式: 原型bean创建 DummyService有一个方法,叫做Dummymethod(String DummyString) 当是从其他服务调用的,不调用建议。 配置类 单例注册类 对
我正在尝试使用“反应原生”中的功能从产品搜索 API 中获取信息。我已获得正确的访问令牌并将其保存到 State,但似乎无法在 GET 请求的授权标头中传递它。 到目前为止,我有以下情况: 我对代码的期望如下: < li >首先,我将从导入的API模块中< code >获取带有数据的访问令牌 < li >之后,我将< code>this.state的< code>clientToken属性设置为等