本文使用IDEA作为开发工具。
1、构建骨架
新建一个普通的Spring Boot项目,名称为springboot-multi-module。
可以参考IDEA新建Spring Boot项目
2、新建一个web子模块
右键项目>>New>>Module
image.png
然后在弹出的子界面中选择的左侧选择Maven,然后Next
image.png
输入子模块的名称,然后Next
image.png
最后Finish
image.png
此时查看原来父类的pom.xml文件,发现packing变为了pom,并且增加了一个modules节点,里面有一个刚添加的web子模块
<!--新增了modules节点-->
<modules>
<module>web</module>
</modules>
<!--由原来的jar变为pom-->
<packaging>pom</packaging>
image.png
3、移动和删除原来父模块的文件
在web模块main>java和test>java 下新建原父模块同名的包,这里是com.xiaozhao
image.png然后开始移动文件,把父工程的SpringbootMultiModuleApplication.java、SpringbootMultiModuleApplicationTests.java 、application.properties移动对web子模块下对应的目录中。用鼠标按住文件拖动即可。
image.png拖动完毕后
image.png
然后删除src文件夹,最后工程的目录为
image.png
4、新建service子模块
然后按照建立web子模块的方式再新建一个service的子模块
然后在service子模块中新建一个包 com.xiaozhao.service,然后在此包新建一个HelloService的类,内容如下:
/**
* @author xiaozhao
* @date 2018/10/26上午11:13
*/
@Service
public class HelloService {
public String hello(String name) {
return "Hello " + name;
}
}
5、在web子模块中引用service子模块的服务
首先在web子模块的pom.xml文件中增加对service模块的依赖,此处注意artifactId的写法,为service模块中pom.xml中的独立的artifactId
image.png <dependencies>
<dependency>
<groupId>com.xiaozhao</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
新建一个HelloController,内容如下:
/**
* @author xiaozhao
* @date 2018/10/26上午11:14
*/
@RestController
@RequestMapping("/user")
public class HelloController {
@Autowired
private HelloService helloService;
@GetMapping("/hello/{name}")
public String sayHello(@PathVariable String name) {
return helloService.hello(name);
}
}
最后运行项目,在地址栏输入 http://localhost:8080/user/hello/Kobe
会看到如下的输出
*Hello Kobe
关于打包
1、打jar包
经过上述步骤之后,可以直接在IDEA开发工具中直接运行,但是执行maven的打包命令时,却会打包失败,提示找不到mainClass,这个时候在web模块的pom.xml文件下增加一个build节点,其中mainClass的值就是web子模块下的SpringbootMultiModuleApplication
<build>
<finalName>${artifactId}-${version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.xiaozhao.SpringbootMultiModuleApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
然后删除父类pom.xml文件中的build节点
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
此时再打包就可以成功了
image.png
但是这种情况下执行 mvn spring-boot:run 依然会提示找不到主类。
2、打war包
也可以打包为war包,放到独立Tomcat下执行。在上面打jar包的基础上做如下的修改:
2.1 首先将web子模块的pom.xml文件中新增一个packaging节点
<!--增加节点-->
<packaging>war</packaging>
2.2 在最外层pom.xml文件中排除内嵌的Tomcat依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--排除tomcat的依赖干扰-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
2.3 修改web子模块下的 SpringbootMultiModuleApplication
继承SpringBootServletInitializer,然后再覆盖其中的configure方法
@SpringBootApplication
public class SpringbootMultiModuleApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootMultiModuleApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootMultiModuleApplication.class);
}
}
最后打成war包即可
image.png
网友评论