java第三方API在多模块Maven项目中看不到类
我有一个多模块maven项目,在dao模块中,我添加了JSON-IO依赖项。当我尝试反序列化我的对象时,它会给我:
Exception in thread "main" com.cedarsoftware.util.io.JsonIoException: Class listed in @type [hu.kleatech.projekt.model.Employee] is not found
类名正确,雇员是公共的,dao将模块作为依赖项。可能出了什么问题
编辑:因为这是一个老问题,很久以前就已经得到了回答,所以我删除了我专门为这个问题制作的github存储库。问题的解决方案在公认的答案中,确切的代码与此无关
# 1 楼答案
Maven依赖项配置是从
<parent>
元素分层的,而不是从<modules>
元素分层的这意味着在项目的
pom.xml
文件中,您依赖于“JSON-IO依赖项”,而不依赖于dao
项目或该类所在的位置<modules>
仅用于定义要构建的项目。模块定义的顺序并不重要,因为Maven根据所需的依赖项检测顺序因此,您可以在
<parent>
pom中定义依赖关系。xml在<dependencies>
元素。然后所有的孩子都会拥有它或者在
<dependencyManagement>
中,需要它的孩子可以将它包含在他们的<dependencies>
中,而无需版本、范围等常见配置看看这里非常相似的答案: How to minimize maven pom.xml
# 2 楼答案
根据你的项目和模块Pom,你的主要Pom应该有以下顺序的模块
Employee类在core中可用,并且应该在core jar中可用
您应该在主Pom中添加DependencyManager,然后在DependencyManager中添加所有模块作为依赖项,这样无论谁将主Pom添加为依赖项,都可以访问您的所有JAR
一旦你改变了顺序,再次构建你的项目,然后更新你的maven项目
如果这段代码正在另一个项目中使用,那么请确保您已将JAR上载到存储库(mvn deploy),这样无论谁使用它,都可以在构建项目时下载它
验证这个jar是否在使用它的主项目中下载的一种方法是在project explorer中签入。这里有一个Maven依赖项部分,您可以查看所有依赖项jar,并检查核心是否存在
我不确定主Pom中的控制器模块在做什么,因为我在您的项目中找不到该名称的模块,所以您应该将其删除或为其添加模块(文件夹)