IDEA中使用springBoot+gradle構建多模塊項目

最近項目中用到了springboot+gradle來構建多模塊項目,寫這篇文章純當作筆記吧,同時也分享給大家。
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.spring.io/snapshot" }
        maven { url "http://repo.spring.io/milestone" }
        maven { url 'http://maven.springframework.org/release' }
        maven { url 'http://maven.springframework.org/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.spring.io/snapshot" }
        maven { url "http://repo.spring.io/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.spring.io/snapshot" }
        maven { url "http://repo.spring.io/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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章