1. 程式人生 > >springboot+gradle 構建多模組專案

springboot+gradle 構建多模組專案

springboot用以進行web專案開發的便捷性,本文不再贅述,主要是想將工作中基於springboot與gradle的多模組專案的構建經驗進行總結與歸納。

1.建立專案

首先安裝java和gradle,本文選用的java版本為1.8.0_40,gradle版本為2.10,安裝過程本文不再贅述。

其次建立專案,名稱為 springboot-mm:
mkdir springboot-mm
cd springboot-mm
gradle init

這裡寫圖片描述

此時的專案結構如下:
這裡寫圖片描述

接下來,建立多個模組,這裡以web和modules為例,先建立相關的目錄,
Linux:

mkdir -p web/src/main/{java,resources}
web/src/test/{java,resource} mkdir -p modules/src/main/{java,resources} modules/src/test/{java,resource}

Windows:

mkdir web\src\main\java,web\src\main\resource,web\src\test\java,web\src\test\resource
mkdir modules\src\main\java,modules\src\main\resource,modules\src\test\java,modules\src\test\resource

此時的目錄結構如下:
這裡寫圖片描述

2.修改配置

首先修改根目錄下的 settings.gradle 檔案,引入子模組:

include 'web','modules' 

其次修改根目錄下的 build.gradle


// 所有子專案的通用配置
subprojects { 
    apply plugin: 'java'
    apply plugin: 'idea'

    version = '1.0.0'  

    // JVM 版本號要求
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    // java編譯的時候預設狀態下會因為中文字元而失敗
[compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8' 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' } } jar { manifest { attributes("Implementation-Title": "Gradle") } } // 顯示當前專案下所有用於 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" } } }

接下來,使用intellij (使用版本為2016.3)匯入專案,匯入成功後,應該可見如下顯示:
這裡寫圖片描述

新增 web/build.gradle 檔案並修改,來定義 web模組的依賴:

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 = 'web'

ext {
    springBootVar = '1.4.5.RELEASE'
}

dependencies {
    compile project(':modules')

    // spring boot
    compile "org.springframework.boot:spring-boot-starter-web:$springBootVar"

    testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVar"
}

新增 modules/build.gradle 檔案,本例中modules是web的依賴模組,通常可以將類似orm,支付,認證等功能分別放到不同的modules中,這樣可以降低程式的耦合性,便於業務的擴充套件。讀者可根據自身專案要求,對modules/build.gradle進行修改,但需要在modules/build.gradle,加入以下配置:

bootRepackage {
    enabled = false
}

具體原因,請參考,此處

3.新增測試程式碼

新增web\src\main\java\com\formularoom\Application.java,示例程式碼如下

@ComponentScan( basePackages = {"com.formularoom"})
@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(8081);
    }
}

新增web\src\main\java\com\formularoom\controller\test1.java

@Controller
public class test1 {

    @RequestMapping(value = "/test1", method = RequestMethod.GET)
    @ResponseBody
    public String test1() {
        return "spring boot multiple modules test";
    }
}

這裡寫圖片描述

完整的示例程式碼,可從此處 獲取。

交流群號,255489119。