springboot多模块项目打包,springboot+dubbo+maven多模块部署
00-1010创建多模块项目依赖开发工具:idea
工程结构:
父工程father
子模块dao(用于与数据库的持久数据交互)
子模块实体(实体类)
子模块服务(处理业务逻辑)
子模块web(唯一具有启动类的模块,它交互地接收和传输数据)
关系:靠服务,靠道,靠实体。
依赖于服务、实体
道依赖于实体
实体不依赖任何人,是独立的。
目录
新文件项目
联网状态下 选择 default,径直走到下一步。
项目结构如下
接下来,完全删除src,父项目也就没必要了,因为父项目只有一个shell的时候就完成了。
接下来,创建一个子模块项目,右键单击新建模块,选择Spring Initaializr Next。
重复上述操作来创建服务。现在实体和服务dao模块和web模块都创建好了。可以根据实际需要选择引入mysql、mybatis、web。
删除每个子模块中无用的文件。mvn,gitignore、daoiml、mvnw、mvnw.cmd文件只留下pom.xml
删除除web模块之外的其他模块中的应用程序启动项目,以及resources目录中的application.properties配置文件。
经过上面的操作,如果你发现你的子模块变成了文件夹,没关系,找到Maven项目刷新即可。
最终项目结果如下
00-1010打开父pom.xml并将打包方法jar更改为pom。注意:构建内容也需要替换,因为默认的spring-boot-maven-plugin方法在后面打包的时候会一直提示你,你引入的依赖是不存在的!代码如下所示
?xml版本=1.0 编码=UTF-8 ?项目xmlns= http://maven . Apache . org/POM/4 . 0 . 0 xmlns : xsi= http://www . w3 . org/2001/XML schema-instance xsi : schema location= http://maven . Apache . org/POM/4 . 0 . 0 http://maven . Apache . org/xsd/maven-4 . 0 . 0 . xsd model version 4。-指定项目的spring boot版本-parentgroupidorg . spring framework . boot/groupid artifactid spring-boot-starter-parent/artifactid version 2.1.3.release/versionrelativepath/!-从存储库- /parent中查找父级!-number-groupidcom.mr/groupidartifactfather/artifactidl版本
t;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: truemybatis.configuration.map-underscore-to-camel-case=true#配置数据源#德鲁伊 连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.username=wsspring.datasource.password=1spring.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 配置文件路径一致 按下图操作
@Mapper //保证被扫描到public interface UserDao { List<User> queryUser();}
在service 模块 com.mr包下创建 UserService 接口 并创建对应的实现类 UserServiceImpl
@Service("userService")public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public List<User> queryService() { return userDao.queryUser(); }}
在 web 模块下 com.mr包下创建对应的 UserController 代码如下
@Controllerpublic 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创建
<#list list as user> ${user.userId} ${user.userName} ${(user.userDate?string("yyyy-MM-dd HH-mm-ss"))!"没有设置时间"} <#--!后如果为空的话 需要显示的内容--></#list>
具体的freemarker 使用-----https:///article/236936.htm
在web 模块的 WebApplication 启动项目访问queryUser 效果如下: 这里展示的是数据库数据
打包可执行jar
因为所有的pom.xml有已经配置好了,只需要动手运行 package打包动作就行了,第一次打包不需要clean,记住以后每次打包之前clean一下,关于为什么打jar包,不打war包这个问题,还有其它会遇到的问题,最后说明
双击运行package,看到BUILD SUCCESS 就证明打包成功了 前提是你的每一个模块下的pom.xml要配置好,谁需要打包,谁不需要打包,谁依赖谁,父工程是否声明了子模块,子模块是否声明了父工程是谁,这些是重点!否则 会焦头烂额
接下来去找你工程目录,web文件夹下的target文件夹,刚才打包好的jar文件,就放在这里了
使用 java -jar web-0.0.1-SNAPSHOT.jar 命令来测试运行打包的可执行jar文件
执行成功 !!!!!
到此这篇关于springboot实现maven多模块和打包部署的文章就介绍到这了,更多相关maven多模块和打包部署内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。