-
Notifications
You must be signed in to change notification settings - Fork 0
maven idea multi projects
yangyp8110 edited this page Jan 17, 2018
·
2 revisions
- 如果遇到问题,可参考最后的问题处理
- 新建一个空白标准maven project(不要选择Create from archetype选项)得到一个标准的maven项目,artifactId:demo.projects
- 该项目是作为一个Parent project存在的,可以直接删除src文件夹。
Parent project
的pom会被module继承,所以公用部分可以在Parent project
里定义好。
再新建四个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-app
对web-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>
- 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 {