在我的 maven 项目中,我有这个依赖项,它是我自己的项目,安装在我的本地 maven 中(通过 cmd mvn install):
<dependency>
<groupId>com.myproject</groupId>
<artifactId>api-core</artifactId>
<version>1.0.0</version>
</dependency>
但是,当我启动 tomcat 服务器时,我将在该项目中的类上得到 ClassDefNotFoundError。
我试图通过项目的属性将 jar 添加到部署程序集,但是当我添加这个 jar 文件时,它被视为一个文件夹,并且总是被放置在“WEB-INF/lib/core”的 Deploy 路径中.api.1.0.0.jar"然后是 lib 中的一个文件夹,因此 tomcat 无法找到 jar 文件。我还注意到在 Web 部署程序集中,Maven 依赖项被部署到 WEB-INF/lib。显然我自己的 jar 文件在部署时不被视为 Maven 依赖项。当我进一步查看 Eclipse 中的 Maven 依赖项时,jar 文件被打包为“核心”文件夹,它不被视为 jar 文件。因此在运行时,Web 应用程序无法找到 jar 文件并向我投诉。
进一步调查表明,在 Eclipse 中,我导入了核心项目,Eclipse 很“聪明”地识别出该项目是生成依赖项的项目,因此自动将 jar 转换为文件夹。如果我删除核心项目,maven 依赖项将成功添加为 jar 文件,然后部署到 tomcat 问题完全没有问题!
所以,我的问题是,这是一种在文件夹结构中保持依赖关系的方法,同时我仍然需要将核心项目导入到我的工作区吗?
最佳答案
是的,有一个:显示 Web 项目的上下文菜单,转到 Maven
选项卡并取消选中 Resolve dependencies from workspace projects
选项:这样Eclipse就不会干扰Maven的依赖解析链。
关于java - 项目会将 Maven 依赖项视为文件夹而不是 jar 文件,并在运行时给出 ClassNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502799/