在idea中創(chuàng)建多模塊的SpringBoot項(xiàng)目

在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方式來運(yùn)行,最常見的就是SpringBoot項(xiàng)目

3.pom

它只是用來做依賴管理,打包成的項(xiàng)目并不能直接運(yùn)行。比如Springboot項(xiàng)目的父依賴以及再住上的依賴打包方式就是pom,因?yàn)樗鼈冎蛔鲆蕾嚬芾怼?/p>

開始創(chuàng)建項(xiàng)目

總共創(chuàng)建三個(gè)module,分別為lyn4ever-web,lyn4ever-service,lyn4ever-dao。就這樣做一個(gè)最簡單的框架

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ì)在這里寫代碼

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)為我們寫好依賴關(guān)系(pom依賴關(guān)系),不然還要自己寫.這時(shí)注意選擇它的父依賴,如果沒有就點(diǎn)擊右邊按紐選擇剛才創(chuàng)建的modulepackage


  • 注意選擇好在磁盤上的文件夾目錄,默認(rèn)情況下是正確的,直接跳過就好了.


  • idea自動(dòng)為我們?cè)诟疙?xiàng)目的pom文件中添加了如下一句



    而且,也可以看到,這個(gè)web項(xiàng)目的父依賴就是剛才創(chuàng)建的modulepackage項(xiàng)目


3.第三步,這個(gè)web的項(xiàng)目就創(chuàng)建好了,我們就將這個(gè)子項(xiàng)目做為項(xiàng)目入口,即寫一個(gè)springboot的啟動(dòng)類,只有這一個(gè)項(xiàng)目要寫,其他的不用寫.

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的依賴
    <dependency>
        <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

4.創(chuàng)建service子項(xiàng)目

和上一個(gè)一樣,new->module->maven然后寫好名字.接著在web項(xiàng)目中添加這個(gè)service的依賴,在web中的pom.xml中添加如下依賴:

    <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ù)庫,我們就要引入mybatis和mysql相關(guān)依賴(由于我們最上一層用的是springboot依賴,所以完全可以引入mybatis依賴)。

  • 這些相關(guān)依賴可以引入到modulepackage的pom文件中,也可以引入到子模塊中。我個(gè)人建議引入到子模塊中,因?yàn)樗⒉皇撬械淖幽K通用的,但是還是要使用父工程來管理這些依賴,怎么辦?那就使用dependencyManagement,如果不明白這個(gè)做法的原理的小伙伴,請(qǐng)戳dependencies與dependencyManagement的區(qū)別
  • dao模塊中的依賴
    <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  • service層要依賴dao層,請(qǐng)?jiān)趕ervice的pom中添加依賴
    <dependency>
            <groupId>cn.lyn4ever</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 在idea右邊的maven管理中可以完全看到它們之間的依賴關(guān)系


6.工程已經(jīng)創(chuàng)建好了,我們就開始與代碼進(jìn)行測試吧。

  • 和我們通常寫代碼是一樣的,web,service,dao層,請(qǐng)自行補(bǔ)全。(代碼已上傳到gitee,隨時(shí)查看項(xiàng)目源代碼地址

7.進(jìn)行測試

7.1寫好代碼后運(yùn)行Application.main()時(shí)報(bào)錯(cuò)


說明@Service沒有掃描到, 所以沒有這個(gè)bean,在Application.java上添加掃描注解@ComponentScan("cn.lyn4ever")



上邊錯(cuò)就是說明掃描到mapper,加上注解@MapperScan("cn.lyn4ever.dao")

幾個(gè)說明:

8.最重要的部分,打包上線和多人協(xié)作的情況處理

8.1 打包上線:

首先,你要明白。我們這么折騰了好一會(huì)兒,到底做了個(gè)什么?

  • service和dao模塊其實(shí)就是一個(gè)被依賴的項(xiàng)目,真正的項(xiàng)目是web這個(gè)模塊。

  • 所以,我們只需要打包web模塊就可以了,但是web模塊依賴service,service依賴dao。

  • maven中的所謂的依賴,就是要在倉庫中尋找依賴。所以我們要先將service和dao這兩個(gè)模塊install到本地maven倉庫中(只有這樣,在打包web模塊時(shí),才能正確找到依賴,先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倉庫中找到它們:


然后對(duì)web模塊進(jìn)行打包,打包完成后,會(huì)在它的target文件夾下生成jar文件,我們運(yùn)行這上jar文件


java -jar web-0.0.1-SNAPSHOT.jar

然后這個(gè)項(xiàng)目就可以上線了。

8.2多人協(xié)作時(shí)

我們使用壓縮包的方式打開上邊這個(gè)打包好的jar包,可以在里邊找到剛才的service和dao打包成的jar包



也就是說,在對(duì)we模塊打包時(shí),是將本地倉庫中的maven倉庫中的service和dao的jar包打包了進(jìn)去,如果是多人協(xié)作的話,最好創(chuàng)建一個(gè)maven私服,這樣就會(huì)更加方便

  • 總結(jié):
  • 1.在實(shí)際工作中,肯定不止一個(gè)web,service,dao。請(qǐng)?jiān)诿麜r(shí)做到見名知義。
  • 2.除了web層,其他的子模塊最終會(huì)被打包成jar包,放在web包中,只需要運(yùn)行這一個(gè)jar包就可以了
  • 3.父工程的打包方式一定要是pom,即
    <packaging>pom</packaging>

項(xiàng)目源代碼地址

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Maven最佳實(shí)踐:劃分模塊 所有用Maven管理的真實(shí)的項(xiàng)目都應(yīng)該是分模塊的,每個(gè)模塊都對(duì)應(yīng)著一個(gè)pom.xml...
    我不是T先生閱讀 2,826評(píng)論 0 4
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個(gè)開源項(xiàng)目。它是用純java開發(fā)的。是一...
    Bcome閱讀 3,144評(píng)論 0 7
  • 引言 很多公司里的web項(xiàng)目是都是用maven管理,maven可以非常方便的管理項(xiàng)目的各種依賴,確實(shí)很好用,但是對(duì)...
    燃燒杯閱讀 904評(píng)論 1 2
  • 逅弈 轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,謝謝! 以前的日子 以前我們寫代碼時(shí),jar包都默認(rèn)放在一個(gè)叫 /lib 的目錄下,然后...
    逅弈閱讀 3,190評(píng)論 3 45
  • 文章大綱 一、maven功能介紹二、maven整合javaweb案例三、私服應(yīng)用(了解)四、總結(jié)五、相關(guān)資料下載六...
    故事愛人c閱讀 612評(píng)論 0 1

友情鏈接更多精彩內(nèi)容