Maven - 模块化开发

在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain/bean(域模型层)、dao/mapper(数据库访问层)、service(业务逻辑层)、web/controller(表现层),这样分层之后,各个层之间的职责会比较明确,后期维护起来也相对比较容易,今天我们就是使用Maven来构建以上的各个层。

项目结构如下:

Maven-ssm-base
  |---- pom.xml
  |---- Maven-ssm-bean
    |---- pom.xml
  |---- Maven-ssm-mapper
    |---- pom.xml
  |---- Maven-ssm-service
    |---- pom.xml
  |---- Maven-ssm-web
    |---- pom.xml

Maven模块化开发项目依赖关系

一、创建父项目,在父项目中加入依赖

● 新建一个maven项目,选择存储位置,并选择创建一个简单的maven工程

● 输入Group Id、Artifact Id、Packaging,packaging选择pom包

● 生成父级工程

● 在base父项目pom.xml中建立依赖管理

<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>cn.alin</groupId>
    <artifactId>maven-ssm-base</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties><!-- 声明版本号 -->
        <!-- lib version -->
        <spring.version>5.0.8.RELEASE</spring.version>
        <mybais.version>3.4.6</mybais.version>
        <mybatis-spring.version>1.3.2</mybatis-spring.version>
        <mysql-connector.version>5.1.46</mysql-connector.version>
        <ojdbc7.version>12.1.0.2.0</ojdbc7.version>
        <druid.version>1.0.16</druid.version>
        <aopalliance.version>1.0</aopalliance.version>
        <aspectj.weaver.version>1.6.4.RELEASE</aspectj.weaver.version>
        <commons.logging.version>1.1.1</commons.logging.version>
        <jstl.version>1.2</jstl.version>
        <log4j.version>1.2.16</log4j.version>
        <slf4j-api.version>1.6.1</slf4j-api.version>
        <slf4j-nop.version>1.6.4</slf4j-nop.version>
        <fileupload.version>1.3.1</fileupload.version>
        <jackson.version>2.9.6</jackson.version>
        <servlet-api.version>8.5.32</servlet-api.version>
        <jsp-api.version>8.5.32</jsp-api.version>

        <!-- plugins version -->
        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
        <tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version>
    </properties>

    <!-- 锁定版本,声明版本 -->
    <dependencyManagement>
        <dependencies>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- spring end -->

            <!-- mybais -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybais.version}</version>
            </dependency>
            <!-- mybatis - spring 整合包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>

            <!-- json -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <!-- json end -->
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <!-- spring end -->

        <!-- mybais -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>

        <!-- mybatis - spring 整合包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector.version}</version>
        </dependency>

        <dependency>
            <groupId>cn.easyproject</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>${ojdbc7.version}</version>
        </dependency>
        <!-- mysql end -->

        <!-- 阿里巴巴的数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!-- aop -->
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>${aopalliance.version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>com.springsource.org.aspectj.weaver</artifactId>
            <version>${aspectj.weaver.version}</version>
        </dependency>
        <!-- aop end -->

        <!-- logging -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>com.springsource.org.apache.commons.logging</artifactId>
            <version>${commons.logging.version}</version>
        </dependency>

        <!-- jsp标准标签库 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <!-- log -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>${slf4j-nop.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- log end -->

        <!--文件上传 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${fileupload.version}</version>
        </dependency>

        <!-- json -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <!-- json end -->


        <!-- servlet-api 8.5.32 -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>${servlet-api.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- jsp-api 8.5.32 -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
            <version>${jsp-api.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat7-maven-plugin.version}</version>
                <configuration>
                    <url>http://localhost:8080/manager/text</url>
                    <username>alin</username>
                    <password>123123</password>
                </configuration>
            </plugin>

        </plugins>

        <!-- 配置文件放行 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <!-- 放行main/resources下的配置文件 如果不放行spring mybatis等配置文件不会被打到包里从而导致错误 -->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

    <!-- 配置Maven的远程仓库 -->
    <distributionManagement>
        <!-- 发布版 -->
        <repository>
            <id>releases</id>
            <url>http://localhost:8081/repository/maven-releases/</url>
        </repository>
        <!-- 快照版 -->
        <snapshotRepository>
            <id>alin-snapshot</id>
            <url>http://localhost:8081/repository/alin-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>

    <!-- mapper模块 -->
    <modules>
        <module>mavem-ssm-mapper</module>
        <module>maven-ssm-bean</module>
        <module>maven-ssm-service</module>
        <module>maven-ssm-controller</module>
    </modules>

</project>
pom.xml

二、创建子模块

● 右击父工程名 -> New -> Project,然后选择新建一个Maven Module工程,【Next】

● 设置子工程名以及父工程,勾选不使用模板创建,【Finish】

选择子项目打包方式为jar(一般非web层为jar包,web层为war包),然后点击【Finish】

依次创建bean、mapper、service、controller子模块,并根据子模块所需创建配置文件

● 子项目创建完成 - 完成之后可以看到在父级目录中生成了子模块,里面包含src目录和pom.xml文件

● bean

<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>cn.alin</groupId>
    <artifactId>maven-ssm-base</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>maven-ssm-bean</artifactId>
</project>
pom.xml
package cn.alin.bean;

public class User {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}
User.java
package cn.alin.bean;

public class ItemInfo {

    // id
    private String item_id;
    // name
    private String item_name;
    // type
    private String item_type;
    // price
    private Double item_price;

    public String getItem_id() {
        return item_id;
    }

    public void setItem_id(String item_id) {
        this.item_id = item_id;
    }

    public String getItem_name() {
        return item_name;
    }

    public void setItem_name(String item_name) {
        this.item_name = item_name;
    }

    public String getItem_type() {
        return item_type;
    }

    public void setItem_type(String item_type) {
        this.item_type = item_type;
    }

    public Double getItem_price() {
        return item_price;
    }

    public void setItem_price(Double item_price) {
        this.item_price = item_price;
    }

    @Override
    public String toString() {
        return "ItemInfo [item_id=" + item_id + ", item_name=" + item_name + ", item_type=" + item_type
                + ", item_price=" + item_price + "]";
    }

}
ItemInfo.java

● mapper 

<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>cn.alin</groupId>
        <artifactId>maven-ssm-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>mavem-ssm-mapper</artifactId>

    <dependencies>
        <dependency>
            <groupId>cn.alin</groupId>
            <artifactId>maven-ssm-bean</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
</project>
pom.xml
package cn.alin.mapper;

import java.util.List;

import cn.alin.bean.ItemInfo;

public interface ItemMapper {
    List<ItemInfo> getAllList();
}
ItemMapper.java
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.alin.mapper.ItemMapper">

    <!-- List<ItemInfo> getAllList(); -->
    <select id="getAllList" resultType="ItemInfo">
        SELECT item_id,item_name,item_type,item_price
        FROM item_info
    </select>

</mapper>
ItemMapper.xml
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_springmvc?useUnicode=true&characterEncoding=utf-8&useSSL=true
jdbc.user=root
jdbc.password=123456
db.properties
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

    <!-- 读取配置文件:数据库 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 配置C3P0数据源 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClass}" />
        <property name="url" value="${jdbc.jdbcUrl}" />
        <property name="username" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 配置Mybatis -->
    <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置bean别名 -->
        <property name="typeAliasesPackage" value="cn.alin.bean" />
    </bean>

    <!-- 配置mapper工厂 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.alin.mapper" />
    </bean>

</beans>
applicationContext_mapper.xml

● service

<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>cn.alin</groupId>
        <artifactId>maven-ssm-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>maven-ssm-service</artifactId>
    <version>0.0.1</version>
    <dependencies>
        <dependency>
            <groupId>cn.alin</groupId>
            <artifactId>mavem-ssm-mapper</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
pom.xml
package cn.alin.service;

import java.util.List;

import cn.alin.bean.ItemInfo;

public interface ItemService {

    List<ItemInfo> getAllList();
}
ItemService.java
package cn.alin.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.alin.bean.ItemInfo;
import cn.alin.mapper.ItemMapper;

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private ItemMapper itemMapper;

    @Override
    public List<ItemInfo> getAllList() {
        return itemMapper.getAllList();
    }

}
ItemServiceImpl.java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

    <!-- 开启注解扫描 -->
    <context:component-scan base-package="cn.alin.service" />

</beans>
applicationContext_service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 事务核心管理器 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 注解事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

</beans>
applicationContext_transaction.xml

● controller - web层的打包方式是war

<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>cn.alin</groupId>
        <artifactId>maven-ssm-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>cn.alin.maven-ssm</groupId>
    <artifactId>maven-ssm-controller</artifactId>
    <packaging>war</packaging>
    
    <dependencies>
        <dependency>
            <groupId>cn.alin</groupId>
            <artifactId>maven-ssm-service</artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
    
</project>
pom.xml
package cn.alin.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.alin.bean.ItemInfo;
import cn.alin.bean.User;
import cn.alin.service.ItemService;

@Controller
public class UserConteoller {

    @Autowired
    private ItemService itemService;

    @RequestMapping("/login2")
    public String login(User user, Model model) {

        System.err.println("user = " + user);

        model.addAttribute("User", user);

        return "list";
    }

    @RequestMapping("/list2")
    public String list(Model model) {

        List<ItemInfo> itemList = itemService.getAllList();

        for (ItemInfo itemInfo : itemList) {
            System.out.println("itemInfo = " + itemInfo);
        }
        model.addAttribute("itemList", itemList);

        return "item_list";
    }

}
UserConteoller.java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">


    <!-- 开启注解扫描 -->
    <context:component-scan base-package="cn.alin.controller" />

    <!-- 开启注解驱动 -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
    <bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 上传文件的编码 -->
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

</beans>
springmvc.xml

三、打包和发布

● 右击父工程名 -> Run As -> Maven build... -> clean tomcat7:deploy 或 clean tomcat7:redeploy

【run】部署项目

● 部署成功 - 访问http://localhost:8080/maven-ssm-controller测试

 

posted @ 2020-03-04 14:27  ohmok  阅读(644)  评论(0)    收藏  举报