多模块Maven工程

0.maven基础回顾


maven作为项目管理工具

  • 依赖管理
    • 对jar包的管理过程,传统工程项目中是直接防止jar包,maven真正的jar包在仓库中放置,项目中只防止jar包的坐标
    • 仓库三类: 本地仓库,远程私服仓库与中央仓库
    • 本地仓库:运行项目,必须保证本地仓库中有对应的jarbao
      如果本地仓库没有,会默认去中央仓库下载,在个公司中会先从远程仓库中下载,远程仓库中没有,会从中央仓库下载或者从本地上传
  • 一键构建
    • 就是使用maven集成的tomcat插件对项目进行编译,测试,打包,安装等
    • maven有三套生命周期,
      • 清理生命周期:clean.
      • default默认生命周期:complie(编译src-main),test(采用合适的测试框架,来测试编译好的源代码),package(将项目打包jar/war),install(安装,执行前三个命令之后,将项目打包安装到本地仓库),deploy:部署 将项目打包发布到远程仓库
      • site生命周期:构建站点文档

1.ssm整合


  1. 创建数据库表 items.sql
  2. 创建maven的web工程
  3. 导入pom.xml

    maven依赖传递_间接依赖

    直接依赖 a项目中导入了b包或坐标, a直接依赖于b
    传递依赖: a项目中导入了b包,b包直接依赖于c,最终a项目中也可以使用c,那么a和c就是传递依赖

解决jar包版本冲突的四个原则:
1_第一声明,优先原则
哪个jar包的坐标在靠上的位置,哪个就是第一声明的包,最后进入项目的就是哪个包的依赖
2_路径近者,优先原则
直接依赖路径并传递依赖路径近,哪个路径近,进入到项目中的就是哪个包
3_直接排除法
使用exclustion标签直接排除某个包下的依赖包

4_锁定jar包版本`

`

统一jar包管理包,统一定义jar包版本

pom.xml
    <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
        <shiro.version>1.2.3</shiro.version>
        <mysql.version>5.1.6</mysql.version>
        <mybatis.version>3.4.5</mybatis.version>
        <spring.security.version>5.0.1.RELEASE</spring.security.version>
    </properties>

锁定jar包版本

pom.xml
<!-- 锁定jar包版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</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-webmvc</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-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

项目运行的环境

pom.xml
<!-- 添加tomcat7插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>

项目依赖jar包

pom.xml
<!-- 项目依赖jar包 -->
    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</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-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</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-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
    </dependencies>

ssm整合代码编写

1_创建itemsDao接口,定义方法

public interface ItemMapper{
    @select("")
    Items findById(Integer id);
}
2_创建POJO Items
字段名:id name price  pic createtime datail
3_创建applicationContext.xml
1)数据源 2)sqlSessionFactory 3)mapper映射扫描
<!--1.dao层配置-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--数据源dataSource-->
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<!--2.mybatis操作,创建一个生产sqlSession对象的工厂对象-->
<!--1)引入数据源-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
    <property name="dataSource" ref="dataSource"/>
<!--2)给POJO对象起别名-->
    <property name="typeAliasesPackage" value="cn.ppvir.domain"/>
</bean>
<!--3.扫描dao接口下的包,使用sqlSession对象给其创建代理对象,并放到容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="mapperScannerConfigurer">
    <property name="basePackage" value="cn.ppvir.dao"/>
</bean>
<!--/dao层配置-->
4_单元测试
@test
public void daoTest(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    ItemMapper itemMapper = applicationContext.getBean();
}
5_service层
  1. 创建ItemsService接口及实现类:注入ItemsMapper
  2. 实现类上添加@service
  3. 实现类上添加@transactional
  4. 编写applicationContext.xml service层部分

    1) Ioc注解扫描 2)平台事务管理器 3)事务注解

applicationContext.xml
<!--service层配置开始-->
<!--1.组件扫描-->
<context:component-scan base-package="cn.ppvir.service"></context:component-scan>
<!--2.配置事务管理器-->
<!--2.1事务平台管理器-->
<!--2.1.1注入连接池-->
 <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
    <property name="dataSource" ref="dataSource"></property>

</bean>
<!--2.2.1开启事务注解-->
<!--2.2.2事务增强-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>
<!--service层配置结束-->
6_service层单元测试
 /**
     * service层测试
     */
    @Autowired
    private ItemsService itemsService;
    @Test
    public void serviceTest(){
        Items items = itemsService.findById(2);
        System.out.println(items.getName());
    }
7_编写web层

1_创建ItemsController 添加@controller 添加@Requestmapping("/items")
2_方法上添加@requestMapping
3_注入service调用方法

4_创建SpringMVC.xml

1)ioc Controller 2)视图解析器 3)注解驱动 4)静态资源放行

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

    <!--组件扫描 只扫描controller-->
    <context:component-scan base-package="cn.ppvir.controller"/>
    <!--配置mvc注解驱动,相当于配置处理器映射器,处理器适配器-->
    <mvc:annotation-driven />
    <!--内部资源视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--开放静态资源访问权限-->
    <mvc:default-servlet-handler/>
</beans>

5_配置web.xml

1)spring监听器 2)springMVC前端控制器 3)乱码解析器

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 xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>Archetype Created Web Application</display-name>
    <!--中文乱码过滤器-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--spring核心监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--首页-->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

6_编写jsp页面

<%--欢迎页面--%>>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello!
<jsp:forward page="items/show"/>
</body>
</html>

<%--跳转页面--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
<form>
    <table width="100%" border=1>
        <tr>
            <td>商品名称</td>
            <td> ${item.name } </td>
        </tr>
        <tr>
            <td>商品价格</td>
            <td> ${item.price } </td>
        </tr>
        <tr>
            <td>生成日期</td>
            <td> <fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/> </td>
        </tr>
        <tr>
            <td>商品简介</td>
            <td>${item.detail} </td>
        </tr>
    </table>
</form>
</body>
</html>

2.maven的聚合和拆分思想


拆分: 把每一层的代码抽取成单独的模块,提高代码的复用性
聚合: 让每一层的子模块产生依赖关系

父工程 : 统一公共资源管理(jar坐标),以及把多个子模块合并成一个项,父工程所有的公共资源都可以直接被子模块使用
多子工程 : 继承父工程,依赖传递了父工程引入的jar包
子工程之间的关系 : 依赖与传递依赖的关系,一开始没有关系,如果要建立关系,我们可以引入其他子模块.

代码可重用:为了便于维护和升级,实现代码可重用与否,关键在于是复制jar包还是引用坐标
把一个项目拆分成多个模块,主要目的就是实现代码的可重用
拆分后的模块,不能完成一个完整的功能.
为了实现完成操作,我们必须再把这些模块聚合到一起变成一个完整的项目

说明:
如果每个项目中都放置一份独立的代码,升级维护时,有几个项目就得修改几次代码.
如果所有的项目都引用一份jar,那么升级维护时,只需要修改jar.

1_不是代码可重用:  
    写了一个工具类编号为tool1,  
    项目a需要tool1,把tool1复制到项目a中  
    项目b需要tool1,把tool1复制到项目b中    
    项目c需要tool1,把tool1复制到项目c中  
    
2_是代码可重用:  
    将tool1打成jar包,每个项目都引入改jar的坐标  

任何一个项目分为前后台, 前台项目面向客户端,后台项目是开发维护人员使用的,
前后台所使用的数据表是一样的,前台订单是展示给客户的,后台拿到的订单数据是展示给公司内部客服.
由此可见,为了实现代码可重用,必须让dao层代码单独是一个模块,前后台项目都可以使用,

创建多模块的maven工程(重要)

  1. 创建父工程 pom包
  2. 创建子模块,子模块要继承父工程
  3. 让子模块产生依赖关系 domain被dao依赖,dao被service依赖,service被web依赖
  4. 粘贴ssm整合代码粘贴到多模块工程
  5. 测试(3种)

传递依赖包丢失
dao直接依赖于父工程,作用域是compile
父工程模块种直接依赖junit,作用域是test
那么我们就可以说dao传递依赖了junit,作用域是test
如果传递依赖到某个子模块中的包不能用,那么表现形式就是无法导入jar包,此时我们只需要在该模块中再次导入该jar包即可

转载于:https://www.cnblogs.com/ppvir/p/11448612.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值