在idea中創(chuàng)建多模塊的SpringBoot項(xiàng)目
首先,了解下maven項(xiàng)目的三種打包方式:
1.war
打包為war包項(xiàng)目時(shí)耗绿,可以放在tomcat下運(yùn)行
2.jar
打包成jar包就是要使用java -jar xxx.jar
方式來(lái)運(yùn)行苹支,最常見(jiàn)的就是SpringBoot項(xiàng)目
3.pom
它只是用來(lái)做依賴(lài)管理,打包成的項(xiàng)目并不能直接運(yùn)行误阻。比如Springboot項(xiàng)目的父依賴(lài)以及再住上的依賴(lài)打包方式就是pom,因?yàn)樗鼈冎蛔鲆蕾?lài)管理。
開(kāi)始創(chuàng)建項(xiàng)目
總共創(chuàng)建三個(gè)module儒洛,分別為lyn4ever-web,lyn4ever-service,lyn4ever-dao狼速。就這樣做一個(gè)最簡(jiǎn)單的框架
1.第一步琅锻,創(chuàng)建父工程
1.1直接創(chuàng)建一個(gè)springboot項(xiàng)目(為了方便,當(dāng)然普通的maven項(xiàng)目也可以向胡,當(dāng)你看懂原理后恼蓬,隨意玩),什么也不需要
這一步只需要選擇對(duì)應(yīng)的版本就可以了僵芹,其他的可選可不選
1.2刪除這個(gè)項(xiàng)目下的src文件夾处硬,因?yàn)槲覀儾⒉粫?huì)在這里寫(xiě)代碼
1.3在pom.xml中添加<packaging>pom</packaging>
這一句
2.第二步郁油,在剛才這個(gè)項(xiàng)目的根文件夾上鼠標(biāo)右鍵,new->module->選擇maven項(xiàng)目
-
一定要在剛才這個(gè)項(xiàng)目的根文件夾上創(chuàng)建,因?yàn)檫@樣它會(huì)自動(dòng)為我們寫(xiě)好依賴(lài)關(guān)系(pom依賴(lài)關(guān)系),不然還要自己寫(xiě).這時(shí)注意選擇它的父依賴(lài),如果沒(méi)有就點(diǎn)擊右邊按紐選擇剛才創(chuàng)建的modulepackage
-
注意選擇好在磁盤(pán)上的文件夾目錄,默認(rèn)情況下是正確的,直接跳過(guò)就好了.
-
idea自動(dòng)為我們?cè)诟疙?xiàng)目的pom文件中添加了如下一句
而且,也可以看到,這個(gè)web項(xiàng)目的父依賴(lài)就是剛才創(chuàng)建的modulepackage項(xiàng)目
3.第三步,這個(gè)web的項(xiàng)目就創(chuàng)建好了,我們就將這個(gè)子項(xiàng)目做為項(xiàng)目入口,即寫(xiě)一個(gè)springboot的啟動(dòng)類(lèi),只有這一個(gè)項(xiàng)目要寫(xiě),其他的不用寫(xiě).
package cn.lyn4ever.web.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 作為web層,我們還要引入springboot-web的依賴(lài)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.創(chuàng)建service子項(xiàng)目
和上一個(gè)一樣,new->module->maven然后寫(xiě)好名字.接著在web項(xiàng)目中添加這個(gè)service的依賴(lài),在web中的pom.xml中添加如下依賴(lài):
<dependency>
<groupId>cn.lyn4ever</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
5.創(chuàng)建dao子項(xiàng)目
同樣,也是創(chuàng)建子maven項(xiàng)目,但是這個(gè)dao層要連接數(shù)據(jù)庫(kù),我們就要引入mybatis和mysql相關(guān)依賴(lài)(由于我們最上一層用的是springboot依賴(lài),所以完全可以引入mybatis依賴(lài))攀痊。
- 這些相關(guān)依賴(lài)可以引入到modulepackage的pom文件中,也可以引入到子模塊中躬审。我個(gè)人建議引入到子模塊中棘街,因?yàn)樗⒉皇撬械淖幽K通用的,但是還是要使用父工程來(lái)管理這些依賴(lài)承边,怎么辦遭殉?那就使用dependencyManagement,如果不明白這個(gè)做法的原理的小伙伴,請(qǐng)戳dependencies與dependencyManagement的區(qū)別
- dao模塊中的依賴(lài)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- service層要依賴(lài)dao層博助,請(qǐng)?jiān)趕ervice的pom中添加依賴(lài)
<dependency>
<groupId>cn.lyn4ever</groupId>
<artifactId>dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
-
在idea右邊的maven管理中可以完全看到它們之間的依賴(lài)關(guān)系
6.工程已經(jīng)創(chuàng)建好了险污,我們就開(kāi)始與代碼進(jìn)行測(cè)試吧。
- 和我們通常寫(xiě)代碼是一樣的富岳,web,service,dao層蛔糯,請(qǐng)自行補(bǔ)全。(代碼已上傳到gitee窖式,隨時(shí)查看項(xiàng)目源代碼地址)
7.進(jìn)行測(cè)試
7.1寫(xiě)好代碼后運(yùn)行Application.main()時(shí)報(bào)錯(cuò)
說(shuō)明@Service沒(méi)有掃描到蚁飒, 所以沒(méi)有這個(gè)bean,在Application.java上添加掃描注解@ComponentScan("cn.lyn4ever")
上邊錯(cuò)就是說(shuō)明掃描到mapper萝喘,加上注解@MapperScan("cn.lyn4ever.dao")
幾個(gè)說(shuō)明:
- 如果創(chuàng)建Springboot項(xiàng)目時(shí)報(bào)錯(cuò)淮逻,說(shuō)無(wú)法訪(fǎng)問(wèn)
https://start.spring.io,請(qǐng)看這里idea中使用Spring Initializr創(chuàng)建項(xiàng)目時(shí)報(bào)錯(cuò)
*最后啟動(dòng)這個(gè)項(xiàng)目(使用我們之前寫(xiě)的Application.mian)啟動(dòng),使用瀏覽器訪(fǎng)問(wèn)成功.
8.最重要的部分琼懊,打包上線(xiàn)和多人協(xié)作的情況處理
8.1 打包上線(xiàn):
首先,你要明白爬早。我們這么折騰了好一會(huì)兒哼丈,到底做了個(gè)什么?
service和dao模塊其實(shí)就是一個(gè)被依賴(lài)的項(xiàng)目凸椿,真正的項(xiàng)目是web這個(gè)模塊削祈。
所以,我們只需要打包web模塊就可以了脑漫,但是web模塊依賴(lài)service,service依賴(lài)dao髓抑。
-
maven中的所謂的依賴(lài),就是要在倉(cāng)庫(kù)中尋找依賴(lài)优幸。所以我們要先將service和dao這兩個(gè)模塊install到本地maven倉(cāng)庫(kù)中(只有這樣吨拍,在打包web模塊時(shí),才能正確找到依賴(lài)网杆,先dao羹饰,再service)。
如果報(bào)錯(cuò)如下
------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage (repackage) on project dao: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
將父項(xiàng)目中的這段代碼復(fù)制到web模塊中碳却,因?yàn)檫@上sprinboot項(xiàng)目打包的插件队秩。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
當(dāng)然,為了避免出現(xiàn)不必要的錯(cuò)誤昼浦,我更建議直接對(duì)modulepackage這個(gè)父項(xiàng)目進(jìn)行install
依次對(duì)dao和service執(zhí)行了install后馍资,可以在本地maven倉(cāng)庫(kù)中找到它們:
然后對(duì)web模塊進(jìn)行打包,打包完成后关噪,會(huì)在它的target文件夾下生成jar文件鸟蟹,我們運(yùn)行這上jar文件
java -jar web-0.0.1-SNAPSHOT.jar
然后這個(gè)項(xiàng)目就可以上線(xiàn)了。
8.2多人協(xié)作時(shí)
我們使用壓縮包的方式打開(kāi)上邊這個(gè)打包好的jar包使兔,可以在里邊找到剛才的service和dao打包成的jar包
也就是說(shuō)建钥,在對(duì)we模塊打包時(shí),是將本地倉(cāng)庫(kù)中的maven倉(cāng)庫(kù)中的service和dao的jar包打包了進(jìn)去虐沥,如果是多人協(xié)作的話(huà)熊经,最好創(chuàng)建一個(gè)maven私服,這樣就會(huì)更加方便
- 總結(jié):
- 1.在實(shí)際工作中置蜀,肯定不止一個(gè)web,service,dao奈搜。請(qǐng)?jiān)诿麜r(shí)做到見(jiàn)名知義。
- 2.除了web層盯荤,其他的子模塊最終會(huì)被打包成jar包馋吗,放在web包中,只需要運(yùn)行這一個(gè)jar包就可以了
- 3.父工程的打包方式一定要是pom,即
<packaging>pom</packaging>
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布秋秤!