Функция Azure с Spring Boot + Spring Cloud Function не может найти основной класс

Попытка запустить azure-sample, но при поступлении запроса возникает ошибка «Не удалось найти основной класс».

Создайте проект в eclipse с помощью maven. Обновленный код на основе этой проблемы (иначе вы получите исключение ClassCast).

Запуск локально или удаленно (после развертывания) вызывает ту же ошибку.

Не изменил POM из образца, за исключением того, что указал на мою функциюAppName, Region, ResourceGroup для подготовки к развертыванию.

Executed 'Functions.uppercase' (Failed, Id=349ca69e-4548-4af2-b6a4-84bf5afbedb5)
[4/10/19 9:03:39 PM] System.Private.CoreLib: Exception while executing function: Functions.uppercase. System.Private.CoreLib: Result: Failure
[4/10/19 9:03:39 PM] Exception: IllegalArgumentException: Failed to locate main class
[4/10/19 9:03:39 PM] Stack: java.lang.IllegalStateException: Failed to discover main class. An attempt was made to discover main class as 'MAIN_CLASS' environment variable, system property as well as entry in META-INF/MANIFEST.MF (in that order).
[4/10/19 9:03:39 PM]    at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.getStartClass(AbstractSpringFunctionAdapterInitializer.java:279)
[4/10/19 9:03:39 PM]    at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.<init>(AbstractSpringFunctionAdapterInitializer.java:99)
[4/10/19 9:03:39 PM]    at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.<init>(AzureSpringBootRequestHandler.java:44)
[4/10/19 9:03:39 PM]    at example.FooHandler.<init>(FooHandler.java:33)
[4/10/19 9:03:39 PM]    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[4/10/19 9:03:39 PM]    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[4/10/19 9:03:39 PM]    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[4/10/19 9:03:39 PM]    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[4/10/19 9:03:39 PM]    at java.lang.Class.newInstance(Class.java:442)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.lambda$execute$1(JavaMethodExecutor.java:54)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.broker.JavaMethodInvokeInfo.invoke(JavaMethodInvokeInfo.java:20)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.execute(JavaMethodExecutor.java:54)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.invokeMethod(JavaFunctionBroker.java:51)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:33)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:10)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45)
[4/10/19 9:03:39 PM]    at com.microsoft.azure.functions.worker.JavaWorkerClient$StreamingMessagePeer.lambda$onNext$0(JavaWorkerClient.java:92)
[4/10/19 9:03:39 PM]    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[4/10/19 9:03:39 PM]    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[4/10/19 9:03:39 PM]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[4/10/19 9:03:39 PM]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[4/10/19 9:03:39 PM]    at java.lang.Thread.run(Thread.java:748)
[4/10/19 9:03:39 PM] Caused by: java.lang.IllegalArgumentException: Failed to locate main class
[4/10/19 9:03:39 PM]    at org.springframework.util.Assert.notNull(Assert.java:198)
[4/10/19 9:03:39 PM]    at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.getStartClass(AbstractSpringFunctionAdapterInitializer.java:275)
[4/10/19 9:03:39 PM]    ... 21 more

РЕДАКТИРОВАТЬ: Кажется, что банка в папке azure-functions отличается от последней банки, созданной плагином Thin spring maven. Файлы МАНИФЕСТА содержат разные сети. Jar-файл azure-functions, кажется, является результатом maven-jar-plugin, но он по-прежнему ссылается на класс @SpringBootApplication как на свой основной. Разве это не должно работать? В чем вообще смысл использования тонкой обертки в этом примере?


person jrobkc    schedule 10.04.2019    source источник


Ответы (1)


На данный момент это можно решить, изменив версию spring-cloud-function-dependencies на 2.0.1.

Также обратите внимание, что все application.properties после сборки должны находиться в папке azure-functions. Это можно сделать несколькими способами.

person jrobkc    schedule 10.04.2019
comment
Можете ли вы также обновиться до 2.1.1? Были некоторые изменения, связанные с этим - person Oleg Zhurakousky; 22.08.2019