project将maven依赖项视为文件夹而不是jar文件,并在运行时给出ClassNotFoundError

时间:2015-12-29 00:32:24

标签: 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文件被打包为“core”文件夹,并且它不被视为jar文件。因此,在运行时,Web应用程序无法找到jar文件并让我抱怨。

进一步的研究表明,在Eclipse中,我已经导入了核心项目,并且Eclipse“智能”地认识到项目是生成依赖项的项目,因此自动将jar转换为文件夹。如果我删除核心项目,maven依赖项将成功添加为jar文件,然后部署到tomcat问题根本没问题!

所以,我的问题是,这是一种保持文件夹结构依赖性的方法,而我仍然可以将核心项目导入我的工作区吗?

1 个答案:

答案 0 :(得分:2)

是的,有一个:显示Web项目的上下文菜单,转到Maven选项卡,然后取消选中 Resolve dependencies from workspace projects选项:这样,Eclipse不会干扰Maven的依赖性解析链。