SpringBoot專案實戰之開源部落格(一)多模組結構搭建
用springboot開發專案已經有挺長的一段時間了,不得不說boot是一個很好的應用層框架。之前也寫過一些關係Boot的東西,但是講的比較粗略,程式碼也沒有貼出來。最近我自己想做個開源部落格專案,所有就打算記錄點東西下來,把0到1,1到100的過程展現給大家,如有不足之處懇請指教。
我這裡是用idea作為開發工具,首先,要new一個project出來,jdk選用版本為1.8:
然後在父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>com.lubingshen</groupId> <artifactId>lblogs</artifactId> <!--父專案的POM檔案一定要指定打包為這個--> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>lblogs-desk-web</module> <module>lblogs-backstage-web</module> <module>lblogs-core-all</module> <module>lblogs-article-service</module> <module>lblogs-manager-service</module> </modules> <name>lblogs::個人開源部落格</name> <url>https://blog.depeatkk.com</url> <properties> <shiro>1.2.5</shiro> <!--tomcat從預設的9降級到8,支援請求url包括中文等特殊字串--> <tomcat.version>8.0.29</tomcat.version> <java.version>1.8</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <!-- Spring Boot 啟動父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <dependencies> <!-- 自動生成GET SET等方法 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <!-- Spring Boot 啟動 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Spring Boot Web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Spring Boot Dubbo 依賴 --> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <!-- dubbo的jar包原始碼為修改後的2.5.3版本,@Inherited新增--> <version>1.0.0</version> </dependency> <!-- Spring Data Jpa 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--json生成--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.23</version> </dependency> <!-- 阿里雲共用sdk --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.3.1</version> </dependency> </dependencies> <!-- 宣告依賴--> <dependencyManagement> <dependencies> <!-- Spring Boot Redis 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.3.2.RELEASE</version> </dependency> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-all</artifactId> <version>${shiro}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${shiro}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>${shiro}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-quartz</artifactId> <version>${shiro}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${shiro}</version> </dependency> <!-- 阿里雲OSS --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.8.2</version> </dependency> <!-- 阿里雲簡訊平臺api --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.0.0</version> </dependency> <!-- 模擬HTTP請求 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <!--JWT生成token--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>2.2.0</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>backstage-web</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- spring-boot:run 中文亂碼解決 --> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
像dom4j那些用的不多的依賴包完全可以在子pom裡面扔進去,一些都要用到的依賴包放在dependencies裡面直接繼承了,一些比較核心或者容易出版本BUG的東西,就用dependencyManagement宣告一下依賴,指定一下版本號。
tips:因為core包的domain實體類包涉及到jpa(hibernate)的標籤,而其他包又依賴於core包,所以直接在父pom裡面新增jpa的標籤了。這時候要注意,因為boot自動裝配的機制,在web模組這種不需要配置也沒有資料來源配置類的地方,在主類上一定要打上@SpringBootApplication(exclude = {HibernateJpaAutoConfiguration.class,DataSourceAutoConfiguration.class})括號裡面的東西。至於spring boot web的依賴包,在父pom裡面可加可不加,我這裡service模組是用到了druid的監控功能,所以乾脆把web依賴加到每一個包裡面了。
下面就是新建modules了,拆模組這東西在專案開發中應該是方案設計時就要確定下來的東西。我這裡初步拆五個模組出來:部落格前臺系統web部分、部落格後臺系統web部分、部落格博文系統service部分、部落格登入許可權系統service部分、共用依賴包core模組。
新建模組在idea裡面操作很簡單,比如:
然後完成後應該是這樣子:
然後子pom的配置檔案如下:
web模組示例(打包方式為jar包,可以選擇指令碼啟動):
<?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"> <parent> <artifactId>lblogs</artifactId> <groupId>com.lubingshen</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>lblogs-backstage-web</artifactId> <packaging>jar</packaging> <name>lblogs::後臺客戶端部分</name> <dependencies> <!-- Spring Boot Redis 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-all</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-quartz</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> </dependency> <!-- core包依賴,記得先install --> <dependency> <groupId>com.lubingshen</groupId> <artifactId>lblogs-core-all</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <finalName>backstage-web</finalName> </build> </project>
service模組示例:
<?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">
<parent>
<artifactId>lblogs</artifactId>
<groupId>com.lubingshen</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>lblogs-article-service</artifactId>
<name>lblogs::部落格服務端部分</name>
<dependencies>
<!-- core包依賴,記得先install -->
<dependency>
<groupId>com.lubingshen</groupId>
<artifactId>lblogs-core-all</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>article-service</finalName>
</build>
</project>
core包示例:
<?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">
<parent>
<artifactId>lblogs</artifactId>
<groupId>com.lubingshen</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>lblogs-core-all</artifactId>
<packaging>jar</packaging>
<name>lblogs::共用部分</name>
<build>
<finalName>core-all</finalName>
</build>
</project>
然後在idea的右上角就可以看見這樣子的一個管理目錄了:
至此,多模組的搭建告一段落了,接下來有空我會實時更新開源部落格的程式碼和記錄進度,支援的博友們請右上角大拇指走一波~