Skip to content

maven idea multi projects

yangyp8110 edited this page Jan 17, 2018 · 2 revisions

创建多module-project

  • 如果遇到问题,可参考最后的问题处理
新建Parent project
  • 新建一个空白标准maven project(不要选择Create from archetype选项)得到一个标准的maven项目,artifactId:demo.projects
  • 该项目是作为一个Parent project存在的,可以直接删除src文件夹。

Parent project的pom会被module继承,所以公用部分可以在Parent project里定义好。

新建module

再新建四个module:

  • web-app
  • web-entity
  • web-repository
  • web-service

新建web-app为Create from archetype选择webapp项目:

添加完web-app module后,可以看到pom里依赖关系:

    <parent>
        <artifactId>demo.projects</artifactId>
        <groupId>demo.maven.projects</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

其他项目建空项目。建完后的项目图:

添加项目之间的依赖关系:

如:添加完web-appweb-entity,web-service依赖关系后,在web-app的pom里可以看到依赖关系:

    <dependencies>
        <dependency>
            <groupId>demo.maven.projects</groupId>
            <artifactId>webservice</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>demo.maven.projects</groupId>
            <artifactId>entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
module间调用

参考源码:mvn + mutil module + spring boot

部署到Tomcat

  • webapp打包类型war,service,repository,entity打jar包
  • 只需要对父project进行package,需要打war包的会在对应项目下打包成功,将打包成功的webapp放到tomcat下,通过浏览器访问成功。

webapp war 包传到tomcat下:

启动成功:

启动遇到的问题:
  • com.demo.web.Controller.HomeController里通过@Autowired注入userService,报错找不到bean为com.demo.Service.IUserService
  • 原因:spring boot 默认是扫描装载入口程序所在的package以及child package下的所有带@Service,@Repository,@Component注解的bean,而web-service module并不与入口程序同package。
  • 解决办法:手动指定扫描的package
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.demo.web","com.demo.Service","com.user.repository"})
public class ApplicationMain {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(ApplicationMain.class, args);
    }
}

  • @Autowired报错Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found
  • 错误详细:
Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found:
	- userServiceImpl: defined in file [C:\Users\xxx\Desktop\r\maven-projects\web-app\target\classes\com\demo\web\Controller\UserServiceImpl.class]
	- IUserService: defined in file [C:\Users\xxx\Desktop\r\maven-projects\web-app\target\classes\com\demo\web\Controller\IUserService.class]
  • 原因:

UserServiceImpl 实现接口 IUserService

//自动注入实现:

    @Autowired
    private IUserService userService;
  • 解决办法:

1、

@Autowired

private IUserService userServiceImpl;

2、

@Service("userService")

public class UserServiceImpl implements IUserService {
Clone this wiki locally