最近项目中用到了springboot+gradle来构建多模块项目,写这篇文章纯当作笔记吧,同时也分享给大家。
gradle和maven是目前很便捷的两款项目构建工具,都有各自的优势。据官方统计,gradle比maven构建项目时快100倍以上。废话不多说,下面介绍一下如何使用gradle创建多模块化工程。
然后,创建多模块。这里以webOne和webTwo模块为例,先创建两个目录:
Windows下创建命令如下:
其次,在webOne模块下新建settings.gradle文件,配置对webTwo模块的依赖,如下:
使用浏览器访问http://127.0.0.1:8080/test1,浏览器显示spring boot multiple modules test。
使用浏览器访问http://127.0.0.1:8080/test2/10/5,得到结果number1+number2=15.
gradle和maven是目前很便捷的两款项目构建工具,都有各自的优势。据官方统计,gradle比maven构建项目时快100倍以上。废话不多说,下面介绍一下如何使用gradle创建多模块化工程。
1.创建项目
首先创建项目,名称为 myGradleProject,创建命令如下:
- mkdir myGradleProject
- cd myGradleProject
- gradle init
执行如下:
这时候的项目结构如下:
然后,创建多模块。这里以webOne和webTwo模块为例,先创建两个目录:
Windows下创建命令如下:
- mkdir webOne\src\main\java,webOne\src\main\resource,webOne\src\test\java,webOne\src\test\resource
- mkdir webTwo\src\main\java,webTwo\src\main\resource,webTwo\src\test\java,webTwo\src\test\resource
Linux下创建命令如下:- mkdir -p webOne/src/main/{java,resources} webOne/src/test/{java,resource}
- mkdir -p webTwo/src/main/{java,resources} webTwo/src/test/{java,resource}
此时的目录结构如下:
2.修改配置
我们首先修改根目录下的 settings.gradle 文件,引入子模块:
include 'webOne','webTwo'
编辑根目录下的 build.gradle,具体配置如下:
- // 所有子项目的通用配置
- subprojects {
- apply plugin: 'java'
- apply plugin: 'eclipse'
- apply plugin: 'idea'
- version = '1.0.0'
- // JVM 版本号要求
- sourceCompatibility = 1.8
- targetCompatibility = 1.8
- // java编译的时候缺省状态下会因为中文字符而失败
- [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'
- //定义版本号
- ext {
- springBootVar = '1.4.5.RELEASE'
- }
- repositories {
- mavenLocal()
- maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
- mavenCentral()
- jcenter()
- maven { url "http://repo./snapshot" }
- maven { url "http://repo./milestone" }
- maven { url 'http://maven./release' }
- maven { url 'http://maven./milestone' }
- }
- dependencies {
- compile(
- )
- testCompile(
- )
- }
- jar {
- manifest {
- attributes("Implementation-Title": "Gradle")
- }
- }
- configurations {
- // 所有需要忽略的包定义在此
- //all*.exclude group: 'commons-httpclient'
- //all*.exclude group: 'commons-logging'
- //all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
- }
- // 显示当前项目下所有用于 compile 的 jar.
- task listJars(description: 'Display all compile jars.') << {
- configurations.compile.each { File file -> println file.name }
- }
- gradle.projectsEvaluated {
- tasks.withType(JavaCompile) {
- options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
- }
- }
- }
其次,在webOne模块下新建settings.gradle文件,配置对webTwo模块的依赖,如下:
- buildscript {
- repositories {
- mavenLocal()
- maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
- maven { url "http://repo./snapshot" }
- maven { url "http://repo./milestone" }
- jcenter()
- }
- dependencies {
- classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.5.RELEASE")
- }
- }
- apply plugin: 'org.springframework.boot'
- archivesBaseName = 'webOne'
- ext {
- springBootVar = '1.4.5.RELEASE'
- }
- dependencies {
- compile project(':webTwo')
- // spring boot
- compile "org.springframework.boot:spring-boot-starter-web:$springBootVar"
- testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVar"
- }
最后,在webTwo模块下新建settings.gradle文件,如下:
- buildscript {
- repositories {
- mavenLocal()
- maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
- maven { url "http://repo./snapshot" }
- maven { url "http://repo./milestone" }
- jcenter()
- }
- dependencies {
- classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.5.RELEASE")
- }
- }
- apply plugin: 'org.springframework.boot'
- archivesBaseName = 'webTwo'
- ext {
- }
- bootRepackage{
- enabled = false
- }
- build{
- }
- dependencies {
- }
- configurations {
- // 所有需要忽略的包定义在此
- //all*.exclude group: 'commons-httpclient'
- //all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
- }
3.编写测试代码
使用intelliJ Idea导入项目(项目路径D:\myproject\myGradleProject)。新增webOne模块项目启动类:webOne\src\main\java\com\forMelo\Application.java,代码如下:
- package main.java.com.forMelo;
- /**
- * Created by songqiuming on 2018/1/7.
- */
- @ComponentScan( basePackages = {"com.forMelo"})
- @EnableAutoConfiguration
- public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer{
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- @Override
- public void customize(ConfigurableEmbeddedServletContainer container) {
- container.setPort(8080);
- }
- }
新增webOne模块测试类webOne\src\main\java\com\forMelo\controller\test.java,代码如下:- package main.java.com.forMelo.controller;
- /**
- * Created by songqiuming on 2018/1/7.
- */
- @Controller
- public class test {
- @RequestMapping(value = "/test1", method = RequestMethod.GET)
- public String test1(){
- return "spring boot multiple modules test";
- }
- @RequestMapping(value = "/test2/{number1}/{number2}", method = RequestMethod.GET)
- @ResponseBody
- public String test2(@PathVariable int number1, @PathVariable int number2) {
- return number1 + "+" + number2 + "=" + testUtils.add(number1,number2);
- }
- }
新增webTwo模块测试类webTwo\src\main\java\com\forMelo\testUtil.java
- package main.java.com.forMelo;
- /**
- * Created by songqiuming on 2018/1/7.
- */
- public class testUtil {
- public static int add(int a, int b){
- return a + b;
- }
- }
此时的项目结构下图:
4.测试Demo
运行启动类中main方法。使用浏览器访问http://127.0.0.1:8080/test1,浏览器显示spring boot multiple modules test。
使用浏览器访问http://127.0.0.1:8080/test2/10/5,得到结果number1+number2=15.