在JavaMaven中正确导入其他模块

在JavaMaven中正确导入其他模块,java,spring,maven,Java,Spring,Maven,我有一个maven项目,有两个模块。它们都有自己的spring应用程序、控制器和mybatis接口,如下所示: project |_ module1 |_ src |_ com.project.module1 |_ Person.java |_ Controller.java |_ Application.java |_ MybatisMapper.java |_ pom.xml //

我有一个maven项目,有两个模块。它们都有自己的spring应用程序、控制器和mybatis接口,如下所示:

project
 |_ module1
    |_ src
       |_ com.project.module1
          |_ Person.java
          |_ Controller.java
          |_ Application.java
          |_ MybatisMapper.java
    |_ pom.xml // pom of module1
 |_ module2
    |_ src
       |_ com.project.module2
          |_ Student.java // import Person.java
          |_ Controller.java
          |_ Application.java
          |_ MybatisMapper.java
    |_ pom.xml // pom of module2
|_ pom.xml // pom of project
因为module2依赖于module1,所以我在module2的pom.xml中添加了依赖关系,如下所示:

<dependency>
    <groupId>com.project</groupId>
    <artifactId>module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>
当我启动模块2的应用程序时,出现错误:

com.project.module2中构造函数的参数1需要找不到类型为“com.project.module1.MybatisMapper”的bean

module2似乎导入了module1的所有组件,可能包括控制器?,但由于我指定了@mappercancom.project.module2,因此未能正确找到module1的映射器。 如何在module2中仅导入Person.java?提前感谢。

如果要使用module1中的所有类,请尝试将module2中的应用程序类放在基本父包下,否则,可以使用ComponentScan注释和excludeFilters排除module1中不需要的类:

package com.project;


@SpringBootApplication
@ComponentScan(basePackages = "com.project",
        excludeFilters = {
                @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com\\.project\\.module1\\.Controller\\..*"),
                @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com\\.project\\.module1\\.MybatisMapper\\..*")
        })
public class Application  {


    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

另一个选项是使用第三个模块,该模块只包含模块1和模块2之间的公共类,并在这两个模块中导入

实际上,模块1和模块2在某种程度上是独立的。我只想重用Person.java,所以您可能需要将它移动到一个单独的模块,并在两个模块中使用,或者更改包并使用带有过滤器的组件扫描注释