springboot创建父子工程、聚合工程及问题解决

springboot创建父子工程、聚合工程

开发工具:IntellJ IDEA 2017

springboot创建父子工程、聚合工程及搭建框架过程中遇到的问题解决

项目名称

wyait父工程【父】:wyait-parent(用于统一依赖版本管理)
wyait通用工程【子】:wyait-common(统一保存通用工具类)
wyait-web工程【子】:wyait-web(聚合工程)

项目框架简述

wyait-web 项目框架设计简述:

  • wyait-web-pojo:保存pojo和entity实体类;
  • wyait-web-dao:数据访问层,与底层 MySQL进行数据交互(依赖pojo);
  • wyait-web-service:相对具体的业务逻辑服务层(依赖mapper/pojo);
  • wyait-web-controller:对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等(依赖service/pojo);
  • wyait-web-webapp:项目启动Application类、配置类、静态资源文件(依赖controller/pojo)。

项目源码

github:https://github.com/wyait/web.git
码云:https://gitee.com/wyait/web.git

注意,源码中没有提交空白目录,有些src/main/java/、src/main/resources/等目录需要大家手动创建!!!

初始技术依赖包括:

  • springboot
  • spring
  • mybatis
  • thymeleaf模版
  • redis
  • httpclient
  • oval校验
  • commons包
  • devTools热部署
  • 静态资源配置(详见:MyWebMvcConfig类)
  • druid数据库连接池
  • pagehelper分页
  • log4j2

静态资源配置说明

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

注意:使用IntellJ IDEA开发工具时,有个问题,见文末。

RedisUtil

redis的使用,参考wyait-common项目中RedisUtil类中的API方法;
参考博客:
spring boot 1.5.9 整合redis:https://blog.51cto.com/wyait/2048478

HttpService

httpClient操作,参考midd-common项目中HttpService类中的API方法,结果封装在HttpResult类中

搭建项目框架

wyait-parent(版本管理)

每个平台都有一个parent项目,用于项目依赖版本统一管理

创建wyait-parent项目

  • File-->new project-->maven:
    image
  • next:输入maven坐标;
  • next:Project name: wyait-parent
  • Finish
  • 删除src/目录。

项目结构如下:
image

导入依赖

注意:

  1. springboot在创建单应用项目的时候,有默认的<parent>依赖;我们在自定义wyait-parent项目时,如果直接以springboot的parent作为wyait-parent项目的<parent>父依赖管理的话,子项目会由于存在两个parent而报错,无法导入依赖。
    解决方案如下:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring.boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

使用spring-boot-dependencies依赖对springboot的依赖包进行统一管理。

  1. maven项目的pom中的标签的含义,自行google、百度了解 //TODO
... ...

    <groupId>com.wyait.parent</groupId>
    <artifactId>wyait-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging><!--父模块打包类型必须为pom-->

    <properties>
        <!--依赖版本号管理-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8
        </project.reporting.outputEncoding>
        <java.version>1.7</java.version>
        <!--spring依赖版本控制(和spring-boot-parent版本保持一致)-->
        <springframework.version>4.3.13.RELEASE</springframework.version>
        <!--spring-boot-parent版本号,通过spring-boot管理其他第三方依赖版本-->
        <spring.boot.version>1.5.9.RELEASE</spring.boot.version>
        <mybatis.version>1.3.1</mybatis.version>
        <druid.version>1.1.5</druid.version>
        <pagehelper.version>1.2.3</pagehelper.version>
        <commons.lang3.version>3.6</commons.lang3.version>
        <commons.io.version>2.5</commons.io.version>
        <oval.version>1.86</oval.version>
    </properties>
    <!--管理依赖jar包-->
    <dependencyManagement>
        <dependencies>
            <!-- 统一管理Spring依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${springframework.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
           ...<!--此处省略,详见源码!源码地址详见文末-->
        </dependencies>
    </dependencyManagement>

    <!--统一插件配置版本管理 TODO-->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <!--指定编译时的jdk版本1.7 -->
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

wyait-common(通用工具类项目)

用于存放通用的工具类;
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-common

方法和创建wyait-parent一致,注意不删除src。

pom依赖

    <parent>
        <groupId>com.wyait.parent</groupId>
        <artifactId>wyait-parent</artifactId>
        <version>1.0.0</version>
    </parent>

    <groupId>com.wyait.common</groupId>
    <artifactId>wyait-common</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <dependencies>
       ...<!--此处省略,根据wyait-common需要导入相应的依赖即可-->
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

wyait-web聚合工程

本demo为了方便,前期所有第三方依赖统一加在pom工程里面。比如:都放在wyait-web的pom文件中。上线前,再统一做调整,分别配置依赖。
建议前期就分配module各项目需要的依赖,避免引入不必要的。

创建wyait-web

操作和创建wyait-common一致。

pom依赖
  1. 项目内版本管理,通过配置properties实现;
  2. 引入通用工具项目wyait-common;
  3. 解决项目启动后,webapp/资源目录编译之后访问不到的问题。
...

    <groupId>com.wyait.web</groupId>
    <artifactId>wyait-web</artifactId>
    <version>${wyait.web.version}</version>
    <packaging>pom</packaging>
    <parent>
        <groupId>com.wyait.parent</groupId>
        <artifactId>wyait-parent</artifactId>
        <version>1.0.0</version>
    </parent>
     <!--聚合子模块-->
    <modules>
    </modules>

    <properties>
        <!--wyait-web项目版本管理-->
        <wyait.web.version>1.0.0</wyait.web.version>
        <wyait.common.version>1.0.0</wyait.common.version>
    </properties>

    <dependencies>
        <!--引入common依赖-->
        <dependency>
            <groupId>com.wyait.common</groupId>
            <artifactId>wyait-common</artifactId>
            <version>${wyait.common.version}</version>
        </dependency>

        ...
        <!--详见源码;源码链接在文末-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!-- 使用IDEA开发工具时,需要加上该resources配置,解决webapp/资源目录无效的问题 -->
        <resources>
            <resource>
                <directory>src/main/webapp</directory>
                <!--编译的时候把webapp文件放到resources下,必须要放在此目录下才能被访问到 -->
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/**</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

创建wyait-web-pojo

选中pom项目wyait-web,右键:new --> module --> maven :

image

finish。

项目结构:
image

pom依赖
 <parent>
        <artifactId>wyait-web</artifactId>
        <groupId>com.wyait.web</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wyait.web.pojo</groupId>
    <artifactId>wyait-web-pojo</artifactId>
    <version>${wyait.web.version}</version>
    <packaging>jar</packaging>

创建wyait-web-service、wyait-web-dao、wyait-web-controller项目一样。pom依赖根据依赖关系,自行调整,详见源码。

创建wyait-web-webapp

方式一

第一种,创建方式和wyait-web-pojo一样;

创建项目完成后,另外需要几步操作:

  1. 新建src/main/webapp/文件目录,用于存放静态资源文件和页面;
  2. src/main/java/目录下,新建包com.wyait.web和com.wyait.web.config,存放springboot启动Application类和相关配置类;
  3. src/main/resources/目录下,保存application.properties、log4j2.xml等配置文件。
    wyait-web-webapp项目架构如下:
    image

注意:这里WEB-INF/下面多了一个web.xml文件,或在pom文件中添加一个maven-war-plugin插件配置,下文会说明原因。

方式二

第二种,在选择maven的时候,选中:Create from archetype,找到:maven-archetype-webapp,创建webapp项目;
然后调整项目结构和依赖和方式一一致即可。//TODO

方式三

第三种,New --> project --> Spring Initializr创建springboot项目 --> 调整项目结构和依赖和上面保持一致即可。//TODO

测试

新建controller类、静态文件和页面,详见源码!

启动测试:

http://127.0.0.1:8099/home
image

IndexController中有midd-common项目中通用工具类的测试,也可自行编写测试
其他技术依赖。//TODO

项目安全

  1. 用户登录后,设置的cookie值token必须加密处理;
  2. API接口安全,涉及用户相关模块的操作,后台会校验token;也可参考博客:java接口安全:https://blog.51cto.com/wyait/1920134
  3. 防止xss、sql注入等,后期统一处理。

项目检出

eclipse

  1. 以eclipse为例,找到SVN资源库,输入SVN地址,checkout:
  2. 检出后,查看项目结构如下:
    image
  3. 选中其中的module项目,右键 --> import:
    image
    选择:Existing Maven Projects --> next --> finish;

就会导出module模块wyait-web-controller,其他模块操作一样。

  1. 运行:
    在wyait-web-webapp项目src/main/java/com/wyait/web/目录下,使用 WyaitWebApplication类中的main方法启动项目。
    也可配置tomcat启动,注意项目路径。//TODO

IntellJ IDEA

相比eclipse简单一些,主要在check out过程中,要注意聚合项目的目录层级结构(平行结构、父子结构)。//TODO

开发工具不同遇到的问题

eclipse和IntellJ IDEA开发工具不同遇到的问题。
使用IntellJ IDEA,必须在依赖中添加以下配置:

  1. 使用IDEA开发工具时,需要在wyait-web目录下,新建src/main/java、src/main/resources空白目录,否则启动时报错:
Caused by: java.lang.IllegalArgumentException: Folder 'D:\wyaitWorkspace\wyait-web\src\main\resources' must exist and must be a directory

加上即可解决;

  1. 使用IDEA开发工具时,注释下面的依赖:
<!--使用IDEA开发工具时,注释该依赖,否则启动报错;IDEA内置tomcat-->
            <!--<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>-->
  1. 使用IDEA开发时,为了配置静态资源文件放在webapp目录下,需要新增如下配置:
<!-- 使用IDEA开发工具时,需要加上该resources配置,解决webapp/资源目录无效的问题 -->
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <!--编译的时候把webapp文件放到resources下,必须要放在此目录下才能被访问到 -->
            <targetPath>META-INF/resources</targetPath>
            <includes>
                <include>**/**</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
    </resources>

项目package时的问题

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文件不需要增加任何配置,内容如下:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

方案二【推荐】:在pom.xml中添加依赖:
注意Failed失败中,maven-war-plugin的版本为2.2。所以pom中配置的插件版本要对应一样。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

转载于:https://blog.51cto.com/wyait/2137112

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中创建父子项目是很常见的做法,可以实现模块化的开发和管理。下面是创建父子项目的步骤: 1. 打开你的 IDE(比如 IntelliJ IDEA 或 Eclipse),新建一个空的 Maven 项目作为父项目。 2. 在父项目的 pom.xml 文件中,配置 Maven 的 `packaging` 为 `pom`,这样该项目就会被识别为父项目。 ```xml <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> ``` 3. 在父项目的 pom.xml 文件中,添加子模块的依赖项。子模块是指其他独立的 Maven 项目,它们可以是 Web 应用、业务模块等等。 ```xml <modules> <module>child1</module> <module>child2</module> <!-- 可以添加更多子模块 --> </modules> ``` 4. 在父项目的 pom.xml 文件中,可以配置一些公共的依赖项或插件供所有子模块使用。例如: ```xml <dependencies> <!-- 公共依赖项 --> </dependencies> <build> <plugins> <!-- 公共插件 --> </plugins> </build> ``` 5. 在 IDE 中右键点击父项目,选择 "New"(或类似选项),然后创建子模块。根据需要可以创建多个子模块。 6. 在子模块的 pom.xml 文件中,配置正确的父项目信息。注意,`<parent>` 标签的配置要与父项目的信息一致。 ```xml <parent> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> </parent> <artifactId>child1</artifactId> <packaging>jar</packaging> ``` 7. 开发你的子模块,可以在子模块中添加自己独立的依赖项和配置。每个子模块都是一个独立的 Maven 项目。 通过以上步骤,你就成功地创建了一个父子项目结构。父项目可以用于管理共享的依赖项和插件,而每个子模块可以专注于自己的开发和构建过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值