java - 项目会将 Maven 依赖项视为文件夹而不是 jar 文件,并在运行时给出 ClassNotFoundError

标签 java eclipse maven tomcat

在我的 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/

相关文章:

java - 在 java 浏览器中部署 HTML 文件

java - 错误 : incompatible types: android. content.Context 无法转换为 com.google.firebase.database.core.Context

Eclipse 升级杀死了 PyDev

java - 将 "this"从 Java 接口(interface)传递到另一个类

java - 使用 Maven 创建 META-INF/services 文件

java - Maven 插件来操作现有的 jar

java - 为什么当前目录不是目标\类?

Java:在单个 FileInputStream 中使用多个 DataInputStream

java - 在 Javafx Tableview 列中添加记录索引

java - Eclipse 中的相对路径