SpringBoot創(chuàng)建maven多模塊項目

SpringBoot創(chuàng)建maven多模塊項目(實戰(zhàn))

工作中一直都是一個人奮戰(zhàn)一人一個項目牡借,使用maven管理笔横,看這個也挺好厂镇,但是總感覺沒有充分發(fā)揮maven的功能苍糠,于是研究了一下這個,網上關于這個的文章很多稠鼻,雖然不是很好冈止,但我從中收獲了很多,在這集百家所長候齿,寫一份實戰(zhàn)記錄熙暴,大家跟著我一塊做吧!

聲明:構建多模塊不是最難的慌盯,難點是如果把多模塊打包成一個執(zhí)行jar怨咪。
SpringBoot官方推崇的是富jar,也就是jar文件啟動項目润匙,所以如果在這里打war包我不具體介紹诗眨,如果需要的朋友可以給我留言,我回復孕讳。

建議clone項目后匠楚,在看教程(有不足的地方希望大家保函,指出來厂财,我們一起學習改進)

github:https://github.com/lxchinesszz/multi-boluome.git

構建工程

  • 1.首先第一步芋簿,在github上創(chuàng)建一個公共項目項目名 multi-boluome

  • 2.把倉庫同步到本地,使用Intellij idea打開璃饱,把普通項目轉換為maven項目【右鍵:Add Frameworks Support】

    轉換為maven項目
    轉換為maven項目
  • 3.刪除除了pom文件之外的文件也就是src刪除

    刪除前
    刪除前
  • 4.然后新建File->New->module以此創(chuàng)建(此時會看到pom文件的變化)

    • web
    • dao
    • domain
    • service

==提示:一定要把外面的pom文件中的<packaging>pom</packaging>==

  • 5.引入SpringBoot依賴 這個我在外面寫的(這個根據個人)
    外面的pom文件內容
    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>blm.server</groupId>
    <artifactId>multi-boluome</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>web</module>
        <module>service</module>
        <module>dao</module>
        <module>domain</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <kotlin.version>1.0.6</kotlin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <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>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--引入mock框架-->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
        </dependency>
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- The plugin rewrites your manifest -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
                <configuration><!-- 指定該Main Class為全局的唯一入口 -->
                    <mainClass>iflyer.IflyerApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中-->
                        </goals>
                        <!--可以生成不含依賴包的不可執(zhí)行Jar包-->
                        <!-- configuration>
                          <classifier>exec</classifier>
                        </configuration> -->
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  • 6.開始編寫domain層(這里我用mongodb數據庫)

  • 7.dao層我要用到數據庫与斤,所以在resource中添加配置信息

  • 8.service層中我有用到freemarker的模板引擎,所以添加配置信息

  • 9.web層編寫啟動類,main方法撩穿,main方法要放到目錄外層磷支,根據約定哦!

  • 10.每個層及都有自己的依賴

```
eg:
    dao層依賴domain
    service依賴dao和domain
    web層依賴service食寡、dao雾狈、domain
這個關系層次一定要告訴,編輯器抵皱,如下設置
    右鍵:Open Module Settings打開
```


idea修改依賴

 ![](https://raw.githubusercontent.com/lxchinesszz/multi-boluome/master/web/src/main/resources/static/image/6.web%E5%B1%82%E4%BE%9D%E8%B5%963%E4%B8%AA.png)
  • 11.run一下啟動類吧善榛!工程可以啟動了

如果出現一下錯誤

Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules
說明依賴關系錯了,繼續(xù)看第10步驟吧呻畸。

打包發(fā)布jar文件

  • 1.在啟動類中修改pom文件(也就是web層的)

    <build>
        <!-- 為jar包取名 -->
        <finalName>blm-start</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
            </plugin>
        </plugins>
    </build>
    
  • 2.在外層pom中構建插件

    <build>
        <plugins>
            <plugin>
                <!-- The plugin rewrites your manifest -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
                <configuration><!-- 指定該Main Class為全局的唯一入口 -->
                    <mainClass>com.Application</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中-->
                        </goals>
                        <!--可以生成不含依賴包的不可執(zhí)行Jar包-->
                        <!-- configuration>
                          <classifier>exec</classifier>
                        </configuration> -->
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
  • 3.打包吧移盆,mvn package —Dmaven.test.skip=true 跳過測試
[INFO] multi-boluome ...................................... SUCCESS [  1.707 s]
[INFO] domain ............................................. SUCCESS [  2.463 s]
[INFO] dao ................................................ SUCCESS [  0.592 s]
[INFO] service ............................................ SUCCESS [  0.606 s]
[INFO] web ................................................ SUCCESS [  1.135 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.290 s
[INFO] Finished at: 2017-01-20T17:05:14+08:00
[INFO] Final Memory: 42M/265M
[INFO] ------------------------------------------------------------------------
KK-MINI:multi-boluome liuxin$ 

INFO] Building jar: /Users/liuxin/git/模仿項目/multi-boluome/web/target/blm-start.jar
構建文件在這個目錄下

very Good!開始飛吧

==提醒:所有模塊里面的父節(jié)點都是一樣的哦伤为,不然會報錯 unknow.version==

WARNING] 'parent.relativePath' of POM blm.server:domain:[unknown-version] 類似

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末咒循,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子钮呀,更是在濱河造成了極大的恐慌剑鞍,老刑警劉巖昨凡,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽醋,死亡現場離奇詭異,居然都是意外死亡便脊,警方通過查閱死者的電腦和手機蚂四,發(fā)現死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哪痰,“玉大人遂赠,你說我怎么就攤上這事∩谓埽” “怎么了跷睦?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肋演。 經常有香客問我抑诸,道長,這世上最難降的妖魔是什么爹殊? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任蜕乡,我火速辦了婚禮,結果婚禮上梗夸,老公的妹妹穿的比我還像新娘层玲。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布辛块。 她就那樣靜靜地躺著畔派,像睡著了一般。 火紅的嫁衣襯著肌膚如雪憨降。 梳的紋絲不亂的頭發(fā)上父虑,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音授药,去河邊找鬼士嚎。 笑死,一個胖子當著我的面吹牛悔叽,可吹牛的內容都是我干的莱衩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼娇澎,長吁一口氣:“原來是場噩夢啊……” “哼笨蚁!你這毒婦竟也來了?” 一聲冷哼從身側響起趟庄,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤括细,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戚啥,有當地人在樹林里發(fā)現了一具尸體奋单,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年猫十,在試婚紗的時候發(fā)現自己被綠了览濒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拖云,死狀恐怖贷笛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情宙项,我是刑警寧澤乏苦,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站尤筐,受9級特大地震影響汇荐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜叔磷,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一拢驾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧改基,春花似錦繁疤、人聲如沸咖为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躁染。三九已至,卻和暖如春架忌,著一層夾襖步出監(jiān)牢的瞬間吞彤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工叹放, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饰恕,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓井仰,卻偏偏與公主長得像埋嵌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俱恶,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理雹嗦,服務發(fā)現,斷路器合是,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Spring Boot Rock'n'Roll - 一個架構士的思考與沉淀https://afoo.me/post...
    葡萄喃喃囈語閱讀 2,540評論 0 6
  • 前言:學習SpringBoot不應該直接就是開始使用SpringBoot,如果直接拿來用肯定會有很多人不是很明白特...
    CoderZS閱讀 74,776評論 10 217
  • 細向紅箋認墨痕了罪,五言七字總清新。 前塵舊事無端夢聪全,別意幽懷何處陳泊藕。 訪故地,問鄉(xiāng)鄰荔烧,知君猶作自由身吱七。 當年謂我無雙...
    仲玙閱讀 385評論 12 14