问题描述
我有 Java 库 A,并创建了一个新的 Azure Functions 模块 B(在 https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-maven-intellij 之后),该模块应使用 A 作为依赖项。
现在:
- 如果我将 B 创建为一个新的独立模块,它就可以工作;
- 如果我将 B 添加为公共(public)父 C 的另一个子模块,则不会。
更具体地说:我的函数的编译、运行和部署没有问题,但是当触发它们中的任何一个时,我会为 A 中定义的每个类得到一个 ClassNotFoundException 。毫不奇怪会发生这种情况,因为A.jar 不存在于 Azure Function 运行文件夹的 lib 子文件夹中(类似于我的 Windows PC 上的 {myUser}\AppData\Local\Temp\azure-functions16636049357177434984如果是本地运行)。但我不明白为什么依赖项 jar 没有复制到那里,特别是编译后它出现在我的 IntelliJ 项目的 target\azure-functions\taxclaims-azure-1596530670055\lib 文件夹中。/p>
为什么会发生这种情况以及如何解决?
<小时/>最小示例
我有 TestParent Java Maven 项目,有两个模块:
- 依赖模块
- azure-functions-module(取决于依赖模块)
在dependency-module中,我有一个带有空主体的DependencyClass,而在azure-functions-module 我有 HttpTriggerFunction 类,具有以下方法:
@FunctionName("TestFunction")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, final ExecutionContext context)
{
DependencyClass instance = new DependencyClass();
return request.createResponseBuilder(HttpStatus.OK).body("OK").build();
}
此模块可以成功部署,但是当触发 TestFunction 时,我获得 DependencyClass 的 ClassNotFoundException。
但是,如果我创建另一个项目,名为TestStandaloneParent,其中包含模块standalone-azure-functions-module 和上面的功能一样,那么一切就顺利了。
如果需要,我当然可以添加更多详细信息,尤其是 pom.xml 文件。
最佳答案
请在这里查看另一个问题:How to add dependency JAR in java azure functions
看起来是打包的问题,需要手动使用maven assembly插件配置来调整。
关于java - 如何在 Maven 子模块中添加 Java Azure Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64423231/