当前位置: 首页 > 知识库问答 >
问题:

如何在 Maven 子模块中添加 Java Azure Functions

聂和宜
2023-03-14

我有我的 Java 库 A,我创建了一个新的 Azure Functions 模块 B(遵循 https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-maven-intellij),它应该使用 A 作为依赖项。

现在:

  • 如果我将B创建为一个新的独立模块,它就可以工作;
  • 如果我将B添加为公共父C的另一个子模块,则不会。

更具体地说:编译,运行和部署我的函数没有问题,但是当它们中的任何一个被触发时,我都会为A中定义的每个类获得一个ClassNotFoundException。难怪它会发生,因为Azure Function的run文件夹的lib子文件夹中不存在A.jar(类似于{myUser}\AppData\Local\Temp\azure-functions16636049357177434984,如果我的Windows PC在本地运行的情况下)。但是我不明白为什么依赖关系jar没有被复制到那里,特别是在编译后,它存在于我的IntelliJ项目的target\azure-functions\taxclaims-azure-1596530670055\lib文件夹中。

为什么会发生这种情况以及如何修复它?

我有测试家长JavaMaven项目,有两个模块:

  • 依赖模块
  • azure功能模块(取决于依赖模块)

在依赖模块中,我有一个带有空体的依赖类,而在azure函数模块中,我有一个具有以下方法的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。

但是,如果我创建另一个项目,称为TestStanalonePential,其中包含一个模块独立-Azure-函数-模块和与上述相同的函数,那么一切都可以顺利进行。

如果需要,我当然可以添加更多细节,特别是pom.xml文件。

共有2个答案

薛彭薄
2023-03-14

看起来IntelliJ Azure插件不使用pom.xml。你可以做的是去文件-

燕凯旋
2023-03-14

请看看这里的另一个问题:如何在JavaAzure函数中添加依赖JAR

这看起来像是打包的问题,您需要手动使用maven assembly插件配置进行调整。

 类似资料:
  • 我试图使用appclient部署我的jar,但我得到了这个错误。 这是我的部署命令 从该错误中可以清楚地看到“java.lang.ClassNotFoundException:com.serverapi.ServiceManagerBeanRemote From[Module”deployment.socket-gateway.jar:main“From Service Module Loader

  • 问题内容: 我是Maven的新手。我从SVN签出了具有以下结构的客户项目: “ projectName”下方的pom.xml(顶部的pom)正在构建三个模块 但是从文件夹执行时会出现以下错误 问题是:就像我的客户可能忘记使用SVN的其余模块一样,下面是否应该有pom.xml ? 问题答案: 问题是:是否应该在projectName-war下面有pom.xml 简单地说 是 。 您已经找到了窍门,并

  • 问题内容: 我试图弄清楚Maven多模块项目中的所有依赖项。首先,我使用appfuse创建了一个新的spring mvc多模块项目。它最初具有Web和核心模块。 我发现了部署此项目的知识。但是当我遇到错误时。我总是在哪里添加依赖项或插件感到困惑。我想澄清以下问题。 我创建了一个appfuse mvc多模块项目。我先安装了核心,然后在网上进行了maven jetty7:run(最初我在根文件夹上运行

  • 我们即将从java8迁移到java9,在我们的代码中我们使用的是soap,因此我需要告诉eclipse使用java.xml进行编译。ws模块。 在第一步中,我不想模块化项目(即添加module-info.java)。相反,我想将每个依赖项保留在未命名的模块中,因此我需要另一种方法将java.xml.ws模块添加到eclipse java编译器中(希望通过使用--add模块=java.xml.ws但

  • 我将项目使用的SDK升级为Java10。以下导入语句导致错误: 导入javax.annotation.PostConstruct; 包的javax。注释“在模块”java中声明。xml。ws。注释',但模块“应用程序”不读取它 点击ALT ENTER让Intellij修复它,我收到以下选项: 我选择了添加Maven依赖...,然后将以下依赖项添加到pom.xml. 查看新添加的JAR清单。MF,我