在idea中創建多模塊的SpringBoot項目


在idea中創建多模塊的SpringBoot項目

首先,了解下maven項目的三種打包方式:

1.war

打包為war包項目時,可以放在tomcat下運行

2.jar

打包成jar包就是要使用java -jar xxx.jar方式來運行,最常見的就是SpringBoot項目

3.pom

它只是用來做依賴管理,打包成的項目並不能直接運行。比如Springboot項目的父依賴以及再住上的依賴打包方式就是pom,因為它們只做依賴管理。

開始創建項目

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

1.第一步,創建父工程

1.1直接創建一個springboot項目(為了方便,當然普通的maven項目也可以,當你看懂原理后,隨意玩),什么也不需要

titletitle
這一步只需要選擇對應的版本就可以了,其他的可選可不選
title

1.2刪除這個項目下的src文件夾,因為我們並不會在這里寫代碼

1.3在pom.xml中添加<packaging>pom</packaging>這一句

2.第二步,在剛才這個項目的根文件夾上鼠標右鍵,new->module->選擇maven項目

  • 一定要在剛才這個項目的根文件夾上創建,因為這樣它會自動為我們寫好依賴關系(pom依賴關系),不然還要自己寫.這時注意選擇它的父依賴,如果沒有就點擊右邊按紐選擇剛才創建的modulepackage
    如果沒有就點擊右邊按紐選擇剛才創建的

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

  • idea自動為我們在父項目的pom文件中添加了如下一句
    idea自動為我們在父項
    而且,也可以看到,這個web項目的父依賴就是剛才創建的modulepackage項目
    個web項目的父依賴

3.第三步,這個web的項目就創建好了,我們就將這個子項目做為項目入口,即寫一個springboot的啟動類,只有這一個項目要寫,其他的不用寫.

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.創建service子項目

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

	<dependency>
            <groupId>cn.lyn4ever</groupId>
            <artifactId>service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

5.創建dao子項目

同樣,也是創建子maven項目,但是這個dao層要連接數據庫,我們就要引入mybatis和mysql相關依賴(由於我們最上一層用的是springboot依賴,所以完全可以引入mybatis依賴)。

  • 這些相關依賴可以引入到modulepackage的pom文件中,也可以引入到子模塊中。我個人建議引入到子模塊中,因為它並不是所有的子模塊通用的,但是還是要使用父工程來管理這些依賴,怎么辦?那就使用dependencyManagement,如果不明白這個做法的原理的小伙伴,請戳dependencies與dependencyManagement的區別
  • 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層,請在service的pom中添加依賴
 	<dependency>
            <groupId>cn.lyn4ever</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 在idea右邊的maven管理中可以完全看到它們之間的依賴關系
    在idea右邊的maven管

6.工程已經創建好了,我們就開始與代碼進行測試吧。

  • 和我們通常寫代碼是一樣的,web,service,dao層,請自行補全。(代碼已上傳到gitee,隨時查看項目源代碼地址

7.進行測試

7.1寫好代碼后運行Application.main()時報錯

寫好代碼后運行Application.main()時報錯
說明@Service沒有掃描到, 所以沒有這個bean,在Application.java上添加掃描注解@ComponentScan("cn.lyn4ever")
title
上邊錯就是說明掃描到mapper,加上注解@MapperScan("cn.lyn4ever.dao")

幾個說明:

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

8.1 打包上線:

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

  • service和dao模塊其實就是一個被依賴的項目,真正的項目是web這個模塊。

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

  • maven中的所謂的依賴,就是要在倉庫中尋找依賴。所以我們要先將service和dao這兩個模塊install到本地maven倉庫中(只有這樣,在打包web模塊時,才能正確找到依賴,先dao,再service)。
    title
    如果報錯如下

------------------------------------------------------------------------
[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

將父項目中的這段代碼復制到web模塊中,因為這上sprinboot項目打包的插件。

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>	

當然,為了避免出現不必要的錯誤,我更建議直接對modulepackage這個父項目進行install
依次對dao和service執行了install后,可以在本地maven倉庫中找到它們:
ao和service執行

然后對web模塊進行打包,打包完成后,會在它的target文件夾下生成jar文件,我們運行這上jar文件
后對web模塊進行打包

java -jar web-0.0.1-SNAPSHOT.jar

然后這個項目就可以上線了。

8.2多人協作時

我們使用壓縮包的方式打開上邊這個打包好的jar包,可以在里邊找到剛才的service和dao打包成的jar包
jar包
也就是說,在對we模塊打包時,是將本地倉庫中的maven倉庫中的service和dao的jar包打包了進去,如果是多人協作的話,最好創建一個maven私服,這樣就會更加方便

  • 總結:
  • 1.在實際工作中,肯定不止一個web,service,dao。請在命名時做到見名知義。
  • 2.除了web層,其他的子模塊最終會被打包成jar包,放在web包中,只需要運行這一個jar包就可以了
  • 3.父工程的打包方式一定要是pom,即
    <packaging>pom</packaging>

項目源代碼地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM