前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >现在的工程结构能满足你的需求吗?

现在的工程结构能满足你的需求吗?

作者头像
田维常
发布2019-09-12 15:32:59
9510
发布2019-09-12 15:32:59
举报

创建单模块工程相信很多人都手到擒来。但如果项目很大,功能很多,你还能继续使用单模块工程吗?项目过大,结构肯定也越来越复杂这时候如果你继续使用单模块工程,进展就会遇到各种问题。同时维护起来也是很麻烦的事情。这个时候你就可以考虑将功能细化,使用多模块工程来替代单模块了。

一、使用maven多模块工程的好处

  1. 复杂项目拆分成多个模块多模块的划分可以降低代码之间的耦合性,方便维护。
  2. 多模块可以根据工程拆分,也可以根据菜单拆分,具体可根据公司要求。结构拆分清晰了,那么公司团队中每个人负责的代码模块也就清晰了。不会出现两个人改了同一段代码,如果功能出现问题责任追踪也很方便。
  3. 方便代码的重用。如果你有一个新的swing项目需要用到app-dao和app-service,添加对它们的依赖即可,你不再需要去依赖一个WAR。比如app-util,就可以作为成公司的一份基础工具类库,供所有项目使用。这是模块化最重要的一个目的。
  4. 解决了包的问题。maven将包的依+赖关系定义在了pom.xml中,所有jar包放在.m2里。这样的话,我们首先不会出现包冲突的问题,其次,解决了我们去找包、去包的问题。
  5. 5.方便、快捷。一键重新编译、一键清理编译代码、一键打包等。总之怎么方便怎么来哇。

二、如何创建maven多模块项目

我们可以粗略的将java代码做Dao、Service和Controller三层划分。

Controller层可以用于:请求转发(route)、视图渲染(view render)。

业务逻辑的实现最终会放到Service和Dao层。

1.创建工程

1.1点击FIle >> New >>Project >>maven

点击Next根据要求选择路径,填写项目名称,一路傻瓜式的Next。

1.2建立好工程之后,删除src文件只保留pom文件

1.3 然后点击File >> New >> module 创建其他模块,此时pom文件会发生变化

创建主项目工程-Web工程,该工程为web工程,并打war包,创建方式也不再是maven。

步骤:父工程右键 >> new Module >> Spring Initializer。

选择需要的模块(这里添加web):

1.4创建好的项目结构如下:

1.5在最外层pom引入SpringBoot依赖

pom.xml依赖:

代码语言:javascript
复制
  <?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>
    <groupId>blm.server</groupId>
    <artifactId>multi-boluome</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>web</module>
        <module>service</module>
        <module>dao</module>
        <module>domain</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <kotlin.version>1.0.6</kotlin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--引入mock框架-->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
        </dependency>
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- The plugin rewrites your manifest -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
                <configuration><!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>iflyer.IflyerApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                        <!--可以生成不含依赖包的不可执行Jar包-->
                        <!-- configuration>
                          <classifier>exec</classifier>
                        </configuration> -->
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2.为每个层添加依赖

dao层依赖domain,service依赖dao和domain,web层依赖service、dao、domain

2.1点击File --> Project Structure 打开

2.2依次添加依赖,点击右侧的+号 >> Module Dependency

添加每个层所需要的依赖

2.3dao层依赖

2.4 Service层依赖

2.5 web层依赖

2.6 domain层依赖

到这里工程就搭建好了。构建模块其实不难,如何把它打包成一个执行jar才是难点。

三、如何打包成一个执行jar包。

3.1 在启动类中修改pom文件(也就是web层的)

代码语言:javascript
复制
<build>
    <!-- 为jar包取名 -->
    <finalName>blm-start</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.RELEASE</version>
        </plugin>
    </plugins>
</build>

3.2 在外层pom中构建插件

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <!-- The plugin rewrites your manifest -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.RELEASE</version>
            <configuration><!-- 指定该Main Class为全局的唯一入口 -->
                <mainClass>com.Application</mainClass>
                <layout>ZIP</layout>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                    </goals>
                    <!--可以生成不含依赖包的不可执行Jar包-->
                    <!-- configuration>
                      <classifier>exec</classifier>
                    </configuration> -->
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1点击FIle >> New >>Project >>maven
  • 1.2建立好工程之后,删除src文件只保留pom文件
  • 创建主项目工程-Web工程,该工程为web工程,并打war包,创建方式也不再是maven。
    • 1.4创建好的项目结构如下:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档