开发工具:IntellJ IDEA 2017
springboot创建父子工程、聚合工程及搭建框架过程中遇到的问题解决
wyait父工程【父】:wyait-parent(用于统一依赖版本管理)
wyait通用工程【子】:wyait-common(统一保存通用工具类)
wyait-web工程【子】:wyait-web(聚合工程)
wyait-web 项目框架设计简述:
github:https://github.com/wyait/web.git
码云:https://gitee.com/wyait/web.git
注意,源码中没有提交空白目录,有些src/main/java/、src/main/resources/等目录需要大家手动创建!!!
MyWebMvcConfig类片段:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(“/css/**”).addResourceLocations(“/css/”);
registry.addResourceHandler(“/images/**”).addResourceLocations(“/images/”);
registry.addResourceHandler(“/js/**”).addResourceLocations(“/js/”);
//配置中的file:表示是一个具体的硬盘路径,其他的配置指的是系统环境变量
registry.addResourceHandler(“/img/**”).addResourceLocations(“file:D:/demo-images/”);
super.addResourceHandlers(registry);
}
把0.jpg图片放到D:/demo-images/路径下,启动项目,访问:
http://127.0.0.1:8099/img/0.jpg
显示图片,配置ok。
注意:使用IntellJ IDEA开发工具时,有个问题,见文末。
redis的使用,参考wyait-common项目中RedisUtil类中的API方法;
参考博客:
spring boot 1.5.9 整合redis:http://blog.51cto.com/wyait/2048478
httpClient操作,参考midd-common项目中HttpService类中的API方法,结果封装在HttpResult类中
每个平台都有一个parent项目,用于项目依赖版本统一管理
导入依赖
注意:
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
使用spring-boot-dependencies依赖对springboot的依赖包进行统一管理。
... ...
com.wyait.parent
wyait-parent
1.0.0
pom
UTF-8
UTF-8
1.7
4.3.13.RELEASE
1.5.9.RELEASE
1.3.1
1.1.5
1.2.3
3.6
2.5
1.86
org.springframework
spring-framework-bom
${springframework.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
...
maven-compiler-plugin
1.7
用于存放通用的工具类;
wyait-common项目,统一保存通用工具类
涉及到bean注入,需要在wyait-web的Application启动类中,添加注解:
@SpringBootApplication
//@ComponentScan用于配置扫描com.wyait.web之外的包下面的类
@ComponentScan(basePackages={"com.wyait"})
public class WyaitWebApplication {
public static void main(String[] args) {
SpringApplication sa=new SpringApplication(WyaitWebApplication.class);
// 禁用devTools热部署
//System.setProperty("spring.devtools.restart.enabled", "false");
// 禁用命令行更改application.properties属性
sa.setAddCommandLineProperties(false);
sa.run(args);
}
}
方法和创建wyait-parent一致,注意不删除src。
pom依赖
com.wyait.parent
wyait-parent
1.0.0
com.wyait.common
wyait-common
1.0.0
jar
...
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
本demo为了方便,前期所有第三方依赖统一加在pom工程里面。比如:都放在wyait-web的pom文件中。上线前,再统一做调整,分别配置依赖。
建议前期就分配module各项目需要的依赖,避免引入不必要的。
操作和创建wyait-common一致。
pom依赖
...
com.wyait.web
wyait-web
${wyait.web.version}
pom
com.wyait.parent
wyait-parent
1.0.0
1.0.0
1.0.0
com.wyait.common
wyait-common
${wyait.common.version}
...
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
src/main/webapp
META-INF/resources
**/**
src/main/resources
true
**/*
选中pom项目wyait-web,右键:new --> module --> maven :
finish。
pom依赖
wyait-web
com.wyait.web
1.0.0
4.0.0
com.wyait.web.pojo
wyait-web-pojo
${wyait.web.version}
jar
创建wyait-web-service、wyait-web-dao、wyait-web-controller项目一样。pom依赖根据依赖关系,自行调整,详见源码。
方式一
第一种,创建方式和wyait-web-pojo一样;
创建项目完成后,另外需要几步操作:
注意:这里WEB-INF/下面多了一个web.xml文件,或在pom文件中添加一个maven-war-plugin插件配置,下文会说明原因。
方式二
第二种,在选择maven的时候,选中:Create from archetype,找到:maven-archetype-webapp,创建webapp项目;
然后调整项目结构和依赖和方式一一致即可。//TODO
方式三
第三种,New --> project --> Spring Initializr创建springboot项目 --> 调整项目结构和依赖和上面保持一致即可。//TODO
新建controller类、静态文件和页面,详见源码!
启动测试:
IndexController中有midd-common项目中通用工具类的测试,也可自行编写测试
其他技术依赖。//TODO
就会导出module模块wyait-web-controller,其他模块操作一样。
相比eclipse简单一些,主要在check out过程中,要注意聚合项目的目录层级结构(平行结构、父子结构)。//TODO
eclipse和IntellJ IDEA开发工具不同遇到的问题。
使用IntellJ IDEA,必须在依赖中添加以下配置:
Caused by: java.lang.IllegalArgumentException: Folder 'D:\wyaitWorkspace\wyait-web\src\main\resources' must exist and must be a directory
加上即可解决;
src/main/webapp
META-INF/resources
**/**
src/main/resources
true
**/*
wyait-web-webapp要打包为war时,项目src/main/webapp/WEB-INF/目录下,如果没有web.xml文件,打包会报错:找不到WEB-INF/web.xml.
... ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.266 s
[INFO] Finished at: 2018-07-18T11:37:05+08:00
[INFO] Final Memory: 19M/184M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project mdd-admin: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
解决方案
方案一:在项目WEB-INF/目录下新建一个web.xml文件,用于项目package时使用,无其他用途。
web.xml文件不需要增加任何配置,内容如下:
Archetype Created Web Application
方案二【推荐】:在pom.xml中添加依赖:
注意Failed失败中,maven-war-plugin的版本为2.2。所以pom中配置的插件版本要对应一样。
org.apache.maven.plugins
maven-war-plugin
2.2
false