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

开发工具 :idea

工程结构:

父工程father

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

子模块 entity (实体类)

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

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

关系: web依赖 service、dao、entity

service依赖 dao、entity

dao依赖 entity

entity谁都不依赖,独立的

创建多模块项目

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

springboot实现maven多模块和打包部署_第1张图片

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

springboot实现maven多模块和打包部署_第2张图片

springboot实现maven多模块和打包部署_第3张图片

springboot实现maven多模块和打包部署_第4张图片

项目结构如下

springboot实现maven多模块和打包部署_第5张图片

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

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

springboot实现maven多模块和打包部署_第6张图片

springboot实现maven多模块和打包部署_第7张图片

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

springboot实现maven多模块和打包部署_第8张图片

springboot实现maven多模块和打包部署_第9张图片

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

springboot实现maven多模块和打包部署_第10张图片

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

springboot实现maven多模块和打包部署_第11张图片

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

springboot实现maven多模块和打包部署_第12张图片

springboot实现maven多模块和打包部署_第13张图片

最终的项目结果如下

springboot实现maven多模块和打包部署_第14张图片

依赖关系

打开父pom.xml修改打包方式jar为pom,注意:build内容也需要做替换,因为默认的spring-boot-maven-plugin这种方式,等到后期打包的时候他会一直提示你,你引入的依赖不存在!代码如下



	4.0.0
	
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	
	com.mr
	father
	0.0.1-SNAPSHOT
	pom 
	father
	Demo project for Spring Boot

	
		1.8
	
	
	
		entity
		dao
		service
		web
	
	
	
		
			org.springframework.boot
			spring-boot-starter
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
	
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.1
				
					${java.version}
					${java.version}
				
			
			
				org.apache.maven.plugins
				maven-surefire-plugin
				2.19.1
				
					true    
				
			
		
	



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

entity 的 pom.xml 内容



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	com.mr
	entity
	0.0.1-SNAPSHOT
	entity
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	



dao 的 pom.xml 内容



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	com.mr
	dao
	0.0.1-SNAPSHOT
	dao
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			2.0.0
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			com.mr
			entity
			0.0.1-SNAPSHOT
		
	




service 模块的 pom.xml 内容



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	com.mr
	service
	0.0.1-SNAPSHOT
	service
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		

		
		
			com.mr
			dao
			0.0.1-SNAPSHOT

		
		
		
			com.mr
			entity
			0.0.1-SNAPSHOT
		
	




web模块的 pom.xml 内容

注意build部分,因为web模块作为程序的入口启动,所以它需要打包,并且要指定Main Class



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	com.mr
	web
	0.0.1-SNAPSHOT
	web
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			2.0.0
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			com.mr
			dao
			0.0.1-SNAPSHOT

		
		
		
			com.mr
			entity
			0.0.1-SNAPSHOT
		

		
		
			com.mr
			service
			0.0.1-SNAPSHOT
		

	


	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					
					com.mr.WebApplication
					ZIP
				
				
					
						
							repackage
						
					
				
			
		
	



到此为止所有的依赖全部完成!接下来就是测试!做了一个简单的查询
在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 中添加以下坐标

	
		
			com.alibaba
			druid-spring-boot-starter
			1.1.10
		

		
		
			org.springframework.boot
			spring-boot-starter-freemarker
		

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 queryUser();
}

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在 web 模块下 com.mr包下创建对应的 UserController 代码如下

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("queryUser")
    public  String   queryUser(ModelMap map){
       List list= userService.queryService();
       map.put("list",list);
       return "list";
    }
}

这里需要建立list.ftl 页面在web 模块下的resource-----templates创建

springboot实现maven多模块和打包部署_第15张图片

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


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

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

在这里插入图片描述

打包可执行jar

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

springboot实现maven多模块和打包部署_第16张图片

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

springboot实现maven多模块和打包部署_第17张图片

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

springboot实现maven多模块和打包部署_第18张图片

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

springboot实现maven多模块和打包部署_第19张图片

执行成功 !!!!!

到此这篇关于springboot实现maven多模块和打包部署的文章就介绍到这了,更多相关maven多模块和打包部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(springboot实现maven多模块和打包部署)