springboot實現(xiàn)maven多模塊和打包部署
開發(fā)工具 :idea
工程結(jié)構(gòu):
父工程father
子模塊 dao (用于持久化數(shù)據(jù)跟數(shù)據(jù)庫交互)
子模塊 entity (實體類)
子模塊 service (處理業(yè)務(wù)邏輯)
子模塊 web (頁面交互接收、傳遞數(shù)據(jù),唯一有啟動類的模塊)
關(guān)系: web依賴 service、dao、entity
service依賴 dao、entity
dao依賴 entity
entity誰都不依賴,獨立的
創(chuàng)建多模塊項目
new ------file-------project

聯(lián)網(wǎng)狀態(tài)下 選擇 default 直接下一步



項目結(jié)構(gòu)如下

接下來,把src整個刪掉,父工程不需要,因為父工程你就當它只有一個外殼就完了
接下來創(chuàng)建子模塊 工程上右鍵 → new → Module 選擇Spring Initaializr 下一步


重復上面操作 創(chuàng)建service 現(xiàn)在創(chuàng)建好了 entity 和 service
dao模塊和web模塊可以根據(jù)實際需求選擇引入mysql,mybatis,web這些


刪除每個子模塊中沒用的文件,.mvn、.gitignore、daoiml、mvnw、mvnw.cmd文件只留下pom.xml

刪除除了web模塊以外其它模塊中的Applicatin啟動項,和resources目錄下的application.properties配置文件

以上動作操作完成以后如果你發(fā)現(xiàn)你的子模塊變成了文件夾,沒關(guān)系,找到Maven Projects刷新一下就好了


最終的項目結(jié)果如下

依賴關(guān)系
打開父pom.xml修改打包方式j(luò)ar為pom,注意:build內(nèi)容也需要做替換,因為默認的spring-boot-maven-plugin這種方式,等到后期打包的時候他會一直提示你,你引入的依賴不存在!代碼如下
<?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>
<!--指定項目的spring boot的版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--版本號-->
<groupId>com.mr</groupId>
<artifactId>father</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <!--父類為pom-->
<name>father</name>
<description>Demo project for Spring Boot</description>
<!--java 版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--管理模塊-->
<modules>
<module>entity</module>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<!--指定項目中的公有依賴-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--指定使用maven 打包-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests> <!--默認關(guān)掉單元測試 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
這里有個坑需要注意,dao、service、entity這三個模塊的pom.xml文件中不需要build 內(nèi)容,直接干掉
entity 的 pom.xml 內(nèi)容
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> <name>entity</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
dao 的 pom.xml 內(nèi)容
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dao</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
service 模塊的 pom.xml 內(nèi)容
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入dao--> <dependency> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
web模塊的 pom.xml 內(nèi)容
注意build部分,因為web模塊作為程序的入口啟動,所以它需要打包,并且要指定Main Class
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mr</groupId> <artifactId>web</artifactId> <version>0.0.1-SNAPSHOT</version> <name>web</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入dao--> <dependency> <groupId>com.mr</groupId> <artifactId>dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入entity--> <dependency> <groupId>com.mr</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--引入service--> <dependency> <groupId>com.mr</groupId> <artifactId>service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定該Main Class為全局的唯一入口 --> <mainClass>com.mr.WebApplication</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中--> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
到此為止所有的依賴全部完成!接下來就是測試!做了一個簡單的查詢
在web的項目里application.properties配置文件里 添加以下配置
# mybatis 配置 #使用mybatis配置文件,需要指定該文件的文件路徑 #指定mapper.xml文件的路徑,如果mapper.xml與接口在一起則不需要該配置 mybatis.mapper-locations=classpath:mapper/*Mapper.xml #掃描pojo包中的實體類并起別名 mybatis.type-aliases-package=com.mr #日志級別改為debug可以顯示sql語句,logging.level后為存放mapper接口的包 logging.level.com.mr.mapper=debug # 開啟駝峰命名法 mybatis.configuration.map-underscore-to-camel-case: true mybatis.configuration.map-underscore-to-camel-case=true #配置數(shù)據(jù)源 #德魯伊 連接池 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.username=ws spring.datasource.password=1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 必須加?號后內(nèi)容 北京時間東八區(qū) spring.datasource.url=jdbc:mysql://127.0.0.1:3306/redis?serverTimezone=GMT%2B8
在web項目里 pom.xml 中添加以下坐標
<!--連接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--引入freemarker--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
entity 模塊里 在com.mr包下 創(chuàng)建實體類
public class User {
private Integer userId;
private String userName;
private String userPass;
@DateTimeFormat(pattern ="yyyy-MM-dd HH-mm-ss")
private Date userDate;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public Date getUserDate() {
return userDate;
}
public void setUserDate(Date userDate) {
this.userDate = userDate;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userPass='" + userPass + '\'' +
", userDate=" + userDate +
'}';
}
public User() {
super();
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
}
在dao模塊下 com.mr 包下 創(chuàng)建接口
@Mapper //保證被掃描到
public interface UserDao {
List<User> queryUser();
}
然后創(chuàng)建 mapper.xml 文件 與web.xml 配置文件路徑一致 按下圖操作

@Mapper //保證被掃描到
public interface UserDao {
List<User> queryUser();
}
在service 模塊 com.mr包下創(chuàng)建 UserService 接口 并創(chuàng)建對應的實現(xiàn)類 UserServiceImpl

@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> queryService() {
return userDao.queryUser();
}
}
在 web 模塊下 com.mr包下創(chuàng)建對應的 UserController 代碼如下
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("queryUser")
public String queryUser(ModelMap map){
List<User> list= userService.queryService();
map.put("list",list);
return "list";
}
}
這里需要建立list.ftl 頁面在web 模塊下的resource-----templates創(chuàng)建

<#list list as user>
${user.userId}
${user.userName}
${(user.userDate?string("yyyy-MM-dd HH-mm-ss"))!"沒有設(shè)置時間"} <#--!后如果為空的話 需要顯示的內(nèi)容-->
</#list>
具體的freemarker 使用-----http://www.dhdzp.com/article/236936.htm
在web 模塊的 WebApplication 啟動項目
訪問queryUser 效果如下: 這里展示的是數(shù)據(jù)庫數(shù)據(jù)

打包可執(zhí)行jar
因為所有的pom.xml有已經(jīng)配置好了,只需要動手運行 package打包動作就行了,第一次打包不需要clean,記住以后每次打包之前clean一下,關(guān)于為什么打jar包,不打war包這個問題,還有其它會遇到的問題,最后說明

雙擊運行package,看到BUILD SUCCESS 就證明打包成功了 前提是你的每一個模塊下的pom.xml要配置好,誰需要打包,誰不需要打包,誰依賴誰,父工程是否聲明了子模塊,子模塊是否聲明了父工程是誰,這些是重點!否則 會焦頭爛額

接下來去找你工程目錄,web文件夾下的target文件夾,剛才打包好的jar文件,就放在這里了

使用 java -jar web-0.0.1-SNAPSHOT.jar 命令來測試運行打包的可執(zhí)行jar文件

執(zhí)行成功 ?。。。。?/p>
到此這篇關(guān)于springboot實現(xiàn)maven多模塊和打包部署的文章就介紹到這了,更多相關(guān)maven多模塊和打包部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JDK1.8源碼下載及idea2021導入jdk1.8源碼的詳細步驟
這篇文章主要介紹了JDK1.8源碼下載及idea2021導入jdk1.8源碼的詳細步驟,在文章開頭就給大家分享了JDK1.8源碼下載地址和下載步驟,告訴大家idea2021.1.3導入JDK1.8源碼步驟,需要的朋友可以參考下2022-11-11
spring異步service中處理線程數(shù)限制詳解
這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
Java的Finalizer引發(fā)的內(nèi)存溢出問題及解決
本文介紹了Java中的Finalizer機制,解釋了當類實現(xiàn)finalize()方法時,JVM的行為和潛在的風險,通過一個示例程序,展示了實現(xiàn)finalize()方法會導致大量對象存活,最終引發(fā)OutOfMemoryError,文章分析了GC日志,解釋了Finalizer線程和主線程之間的競爭2025-03-03
springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池無效問題)
這篇文章主要介紹了springboot2整合redis使用lettuce連接池(解決lettuce連接池無效問題),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

