springboot实现maven多模块和打包部署

作者:一叶知秋_dba 时间:2022-01-06 00:41:15 

开发工具 :idea

工程结构:

父工程father

子模块 dao (用于持久化数据跟数据库交互)

子模块 entity (实体类)

子模块 service (处理业务逻辑)

子模块 web (页面交互接收、传递数据,唯一有启动类的模块)

关系: web依赖 service、dao、entity

service依赖 dao、entity

dao依赖 entity

entity谁都不依赖,独立的

创建多模块项目

new ------file-------project

springboot实现maven多模块和打包部署

联网状态下 选择 default 直接下一步

springboot实现maven多模块和打包部署

springboot实现maven多模块和打包部署

springboot实现maven多模块和打包部署

项目结构如下

springboot实现maven多模块和打包部署

接下来,把src整个删掉,父工程不需要,因为父工程你就当它只有一个外壳就完了

接下来创建子模块 工程上右键 → new → Module 选择Spring Initaializr 下一步

springboot实现maven多模块和打包部署

springboot实现maven多模块和打包部署

重复上面操作 创建service 现在创建好了 entity 和 service
dao模块和web模块可以根据实际需求选择引入mysql,mybatis,web这些

springboot实现maven多模块和打包部署

springboot实现maven多模块和打包部署

删除每个子模块中没用的文件,.mvn、.gitignore、daoiml、mvnw、mvnw.cmd文件只留下pom.xml

springboot实现maven多模块和打包部署

删除除了web模块以外其它模块中的Applicatin启动项,和resources目录下的application.properties配置文件

springboot实现maven多模块和打包部署

以上动作操作完成以后如果你发现你的子模块变成了文件夹,没关系,找到Maven Projects刷新一下就好了

springboot实现maven多模块和打包部署

springboot实现maven多模块和打包部署

最终的项目结果如下

springboot实现maven多模块和打包部署

依赖关系

打开父pom.xml修改打包方式jar为pom,注意:build内容也需要做替换,因为默认的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>    <!--默认关掉单元测试 -->
</configuration>
</plugin>
</plugins>
</build>

</project>

这里有个坑需要注意,dao、service、entity这三个模块的pom.xml文件中不需要build 内容,直接干掉

entity 的 pom.xml 内容

<?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 内容

<?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 内容

<?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 内容

注意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

#配置数据源
#德鲁伊 连接池
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
# 必须加?号后内容 北京时间东八区
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包下 创建实体类

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 包下 创建接口

@Mapper  //保证被扫描到
public interface UserDao {
   List<User> queryUser();
}

然后创建 mapper.xml 文件 与web.xml 配置文件路径一致 按下图操作

springboot实现maven多模块和打包部署

@Mapper  //保证被扫描到
public interface UserDao {
   List<User> queryUser();
}

在service 模块 com.mr包下创建 UserService 接口 并创建对应的实现类 UserServiceImpl

springboot实现maven多模块和打包部署

@Service("userService")
public class UserServiceImpl implements UserService {
   @Autowired
   private UserDao userDao;

@Override
   public List<User> queryService() {
       return userDao.queryUser();
   }
}

在 web 模块下 com.mr包下创建对应的 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创建

springboot实现maven多模块和打包部署

<#list list as user>
  ${user.userId}
  ${user.userName}
  ${(user.userDate?string("yyyy-MM-dd HH-mm-ss"))!"没有设置时间"}  <#--!后如果为空的话 需要显示的内容-->

</#list>

具体的freemarker 使用-----https://www.jb51.net/article/236936.htm

在web 模块的 WebApplication 启动项目
访问queryUser 效果如下: 这里展示的是数据库数据

springboot实现maven多模块和打包部署

打包可执行jar

因为所有的pom.xml有已经配置好了,只需要动手运行 package打包动作就行了,第一次打包不需要clean,记住以后每次打包之前clean一下,关于为什么打jar包,不打war包这个问题,还有其它会遇到的问题,最后说明

springboot实现maven多模块和打包部署

双击运行package,看到BUILD SUCCESS 就证明打包成功了 前提是你的每一个模块下的pom.xml要配置好,谁需要打包,谁不需要打包,谁依赖谁,父工程是否声明了子模块,子模块是否声明了父工程是谁,这些是重点!否则 会焦头烂额

springboot实现maven多模块和打包部署

接下来去找你工程目录,web文件夹下的target文件夹,刚才打包好的jar文件,就放在这里了

springboot实现maven多模块和打包部署

使用 java -jar web-0.0.1-SNAPSHOT.jar 命令来测试运行打包的可执行jar文件

springboot实现maven多模块和打包部署

执行成功 !!!!!

来源:https://blog.csdn.net/weixin_43726822/article/details/88562314

标签:maven,多模块,打包
0
投稿

猜你喜欢

  • Android简单实现圆盘抽奖界面

    2022-07-25 08:35:27
  • 关于Java中的try-with-resources语句

    2022-10-21 16:49:54
  • Springboot异常日志输出方式

    2022-04-14 05:38:27
  • Springboot整合企业微信机器人助手推送消息的实现

    2023-08-18 08:37:37
  • Spring Boot web项目的TDD流程

    2023-07-06 16:10:10
  • 如何将javaweb项目部署到linux下

    2023-11-11 11:45:11
  • C#使用protobuf-net进行序列化的详细操作

    2021-11-17 02:32:41
  • Android中FontMetrics的几个属性全面讲解

    2023-11-14 14:57:20
  • RabbitMQ延迟队列及消息延迟推送实现详解

    2023-11-15 15:31:31
  • JAVA发送http get/post请求,调用http接口、方法详解

    2021-11-02 16:41:19
  • 设计模式系列之组合模式及其在JDK和MyBatis源码中的运用详解

    2022-12-27 12:56:57
  • 详解MyBatis逆向工程

    2021-12-12 02:38:04
  • Android 源码如何编译调试

    2023-09-03 07:46:40
  • Spring 报错:元素 "context:component-scan" 的前缀 "context" 未绑定的问题解决

    2023-09-10 07:45:34
  • Java Lock锁多线程中实现流水线任务

    2023-08-09 17:44:02
  • Unity3d实现跑马灯广播效果

    2022-11-13 20:08:12
  • C#实现获取一年中是第几个星期的方法

    2023-12-04 02:02:46
  • Java项目有中多个线程如何查找死锁

    2023-01-06 06:17:35
  • 在Winform和WPF中注册全局快捷键实现思路及代码

    2023-03-13 23:00:25
  • Unity Shader实现描边OutLine效果

    2022-01-13 03:11:13
  • asp之家 软件编程 m.aspxhome.com