有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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存储库。问题的解决方案在公认的答案中,确切的代码与此无关


共 (2) 个答案

  1. # 1 楼答案

    Maven依赖项配置是从<parent>元素分层的,而不是从<modules>元素分层的

    这意味着在项目的pom.xml文件中,您依赖于“JSON-IO依赖项”,而不依赖于dao项目或该类所在的位置

    <modules>仅用于定义要构建的项目。模块定义的顺序并不重要,因为Maven根据所需的依赖项检测顺序

    因此,您可以在<parent>pom中定义依赖关系。xml在

    • <dependencies>元素。然后所有的孩子都会拥有它

    • 或者在<dependencyManagement>中,需要它的孩子可以将它包含在他们的<dependencies>中,而无需版本、范围等常见配置

    看看这里非常相似的答案: How to minimize maven pom.xml

  2. # 2 楼答案

    根据你的项目和模块Pom,你的主要Pom应该有以下顺序的模块

        <modules>
            <module>core</module>
            <module>controller</module>
            <module>service</module>
            <module>dao</module>
        </modules>
    
    • 服务依赖于核心,所以核心应该在服务之前构建
    • dao依赖于服务和核心,所以dao应该在核心和服务之后

    Employee类在core中可用,并且应该在core jar中可用

    您应该在主Pom中添加DependencyManager,然后在DependencyManager中添加所有模块作为依赖项,这样无论谁将主Pom添加为依赖项,都可以访问您的所有JAR

    一旦你改变了顺序,再次构建你的项目,然后更新你的maven项目

    如果这段代码正在另一个项目中使用,那么请确保您已将JAR上载到存储库(mvn deploy),这样无论谁使用它,都可以在构建项目时下载它

    验证这个jar是否在使用它的主项目中下载的一种方法是在project explorer中签入。这里有一个Maven依赖项部分,您可以查看所有依赖项jar,并检查核心是否存在

    我不确定主Pom中的控制器模块在做什么,因为我在您的项目中找不到该名称的模块,所以您应该将其删除或为其添加模块(文件夹)