Maven拆分聚合应用总结笔记
maven基础回顾
maven是一个项目管理工具
依赖管理:
对项目中jar包的管理,传统工程直接把jar包放置在项目中,maven工程中把jar包放在仓库中。
仓库的分类:
本地仓库、远程仓库(私服)、中央仓库
仓库间的关系:
启动一个maven工程时,maven工程会根据pom.xml文件中jar包坐标去本地仓库寻找,如果本地仓库没有,默认会自动去中央仓库下载jar包到本地仓库。
在公司中会先从私服下载jar包,如果私服没有可以从中央仓库下载或从本地上传。
一键构建:
maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
常用命令:
clean清理之前的构建信息
compile对src/main/java下的代码编译
test编译测试代码
package打包本地项目到target目录下
install把包安装到本地仓库
deploy打包本地项目到私服
生命周期:
清理生命周期 clean
默认生命周期 compile->deploy
站点生命周期
构建SSM工程
创建数据库表
CREATE TABLE `items` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20) DEFAULT NULL, `price` FLOAT(10,0) DEFAULT NULL, `pic` VARCHAR(40) DEFAULT NULL, `createtime` DATETIME DEFAULT NULL, `detail` VARCHAR(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `items` VALUES ('1', '湖人球票', '1000', NULL, '2019-02-07 09:29:30', '湖人vs快船'); INSERT INTO `items` VALUES ('2', '科比球衣','599', NULL, '2018-03-28 10:05:52', 'rip'); INSERT INTO `items` VALUES ('3', 'N95口罩', '199', NULL, '2018-03-07 10:08:04', '买不到');
搭建环境
创建一个新的maven工程
在最后一步添加以下属性提高项目构建速度
当只导入以下依赖时,发现还出现了其他依赖的jar包,这种现象叫依赖传递。
解决jar包冲突的方式
方式一 第一声明优先原则
哪个jar包靠上配置,它所依赖的包优先进入项目中
例:加入以下配置,发现有的包版本变为5.0.2
方式二 路径近优先原则
直接依赖路径比传递依赖路径近,最终进入项目的jar包是路径近的直接依赖包
直接依赖:项目中直接导入的jar包
传递依赖:项目中没有直接导入的jar包,通过直接依赖包传递到项目中
例:增加以下配置,发现版本变回5.2.1
方式三 排除依赖(推荐使用)
当我们要排除某个jar包下的依赖包时,在配置exclusion标签时可以不写版本号,因为此时依赖包所使用的版本默认和本jar包一样。
例:排除core包
锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
把版本号提取出来,使用
<properties>标签设置成变量。
完整的pom.xml文件
<?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>com.sjh</groupId> <artifactId>maven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.2.1.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.17</log4j.version> <shiro.version>1.2.3</shiro.version> <mysql.version>5.1.44</mysql.version> <mybatis.version>3.4.5</mybatis.version> <spring.security.version>5.2.1.RELEASE</spring.security.version> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</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-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>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> </dependencies> </project>
dao层代码编写
配置以下文件夹
创建对应数据库表的实体类Item
package com.pojo; import java.util.Date; public class Item { private Integer id; private String name; private Float price; private String pic; private Date createtime; private String detail; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Float getPrice() { return price; } public void setPrice(Float price) { this.price = price; } public String getPic() { return pic; } public void setPic(String pic) { this.pic = pic; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } @Override public String toString() { return "Item{" + "id=" + id + ", name='" + name + '\'' + ", price=" + price + ", pic='" + pic + '\'' + ", createtime=" + createtime + ", detail='" + detail + '\'' + '}'; } }
在resouces目录下新建springConfig.xml配置文件,对dao层进行相关配置
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置dao层--> <!-- 1 配置数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///test?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value=""/> </bean> <!-- 2 配置sqlSession工厂生产sqlsession --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 扫描接口包路径,生成包下所有接口的代理对象,放入spring容器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dao"/> </bean> <!--配置dao层结束--> </beans>
创建操作Item的dao接口
package com.dao; import com.pojo.Item; import org.apache.ibatis.annotations.Select; public interface ItemDao { @Select("select * from items where id=#{id}") Item findById(int id); }
创建测试类,进行测试
public class ItemTest { @Test public void findById(){ ApplicationContext ac=new ClassPathXmlApplicationContext("springConfig.xml"); ItemDao itemDao = ac.getBean(ItemDao.class); Item item = itemDao.findById(1); System.out.println(item); } }
结果:
service层代码编写
service层的接口和实现类
public interface ItemService { Item findById(int id); }
@Service public class ItemServiceImpl implements ItemService { @Autowired private ItemDao itemDao; @Override public Item findById(int id) { return itemDao.findById(id); } }
在springConfig.xml中增加对service层的配置
<!--配置service层--> <!-- 组件扫描 --> <context:component-scan base-package="com"/> <!--配置事务管理器 --> <bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="interceptor" transaction-manager="tranManager"> <tx:attributes> <tx:method name="find*" read-only="true"/> <!-- 除了查询外的增删改需要事务--> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="save*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.service.*.*(..))"/> <aop:advisor advice-ref="interceptor" pointcut-ref="pointcut"/> </aop:config> <!--配置service层结束-->
在测试类中进行测试
@Test public void findById(){ ApplicationContext ac=new ClassPathXmlApplicationContext("springConfig.xml"); ItemService service = ac.getBean(ItemService.class); Item item = service.findById(1); System.out.println(item); }
web层代码编写
新建一个控制器类
@Controller @RequestMapping("/items") public class ItemController { @Autowired private ItemService itemService; @RequestMapping("/find") public String findById(Model model,int id){ Item item = itemService.findById(id); model.addAttribute("item",item); return "itemDetail"; } }
前端index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <body> <h2>Hello World!</h2> <form action="items/find" method="post"> 输入要查询商品的id号:<input type="text" name="id"><br> <input type="submit"> </form> </body> </html>
在WEB-INF/pages下新建itemDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ 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>
配置mvc
<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置组件扫描 --> <context:component-scan base-package="com.controller"/> <!-- 配置处理器映射器和处理器适配器 --> <mvc:annotation-driven/> <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 释放静态资源 --> <mvc:default-servlet-handler/> </beans>
修改web.xml配置
<!--配置编码过滤器 --> <filter> <filter-name>filter</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> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置前端控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 读取spring*.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring*.xml</param-value> </init-param> <!-- 启动后加载 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!-- 匹配除jsp之外的所有资源--> <url-pattern>/</url-pattern> </servlet-mapping>
配置tomcat服务器,启动测试
构建maven父子工程
传统maven工程存在的问题
继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的配置提取出来在父工程的 pom.xml 中定义。
项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在
一起运行,比如:dao、service、web 三个工程最终会打一个独立的 war 运行。
构建父子工程模块
新建一个maven工程,不需要使用骨架
可以将src目录删掉
右键maven_parent文件夹新建一个module,不需要使用骨架
可以看到新建的子模块的pom.xml文件具有parent标签
而父工程的pom.xml文件也多了module标签
依次再建立service和web的子模块(web模块需要使用webapp的骨架),可以删除web模块pom.xml文件中的多余部分,只保留以下模块
完整的父子工程结构
工程和模块的区别
- 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码是否完整
- 工程初始只能使用自己内部的资源,是独立的,后面可以手动和其他工程和模块建立关系
- 模块初始不是独立的,属于父工程,模块一旦创立,所有父工程的资源都能使用
- 父子工程中,子模块初始集成父工程,可以使用父工程所有资源,但子模块之间初始不能互相使用资源,需要配置联系
- 父子工程中不用建立关系,继承关系是先天的,不需要手动建立
- 平级之间的引用叫依赖,依赖不是先天的,需要手动建立
在service层中引用dao的配置
在web中引用service的配置
把之前ssm项目的pom文件中依赖导入当前父工程的pom文件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.2.1.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.17</log4j.version> <shiro.version>1.2.3</shiro.version> <mysql.version>5.1.44</mysql.version> <mybatis.version>3.4.5</mybatis.version> <spring.security.version>5.2.1.RELEASE</spring.security.version> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</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-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>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> </dependencies>
引入dao层代码
将之前的dao包和pojo包以及关于dao的spring配置引入
spring-dao.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--配置dao层--> <!-- 1 配置数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///test?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value=""/> </bean> <!-- 2 配置sqlSession工厂生产sqlsession --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 扫描接口包路径,生成包下所有接口的代理对象,放入spring容器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dao"/> </bean> <!--配置dao层结束--> </beans>
引入service层代码
将之前的service包以及关于service的spring配置引入
spring-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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--配置service层--> <!-- 组件扫描 --> <context:component-scan base-package="com.service"/> <!--配置事务管理器 --> <bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/>(这里报红不用管) </bean> <tx:advice id="interceptor" transaction-manager="tranManager"> <tx:attributes> <tx:method name="find*" read-only="true"/> <!-- 除了查询外的增删改需要事务--> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="save*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.service.*.*(..))"/> <aop:advisor advice-ref="interceptor" pointcut-ref="pointcut"/> </aop:config> <!--配置service层结束--> </beans>
引入web层代码
将之前的controller包以及关于mvc的spring配置、前端页面、web.xml引入
在springmvc.xml中加入
<!-- 引入service和dao的配置 --> <import resource="classpath:spring-dao.xml"/> <import resource="classpath:spring-service.xml"/>
测试
对maven_web子工程配置tomcat服务器并启动
- 点赞
- 收藏
- 分享
- 文章举报
- 学习笔记之maven2学习总结(3,maven2在淘宝项目的应用)
- 学习笔记之maven2学习总结(3,maven2在淘宝项目的应用) [ 光影人像 东海陈光剑 的博客 ]
- Maven学习总结(三)——聚合和继承
- maven 学习笔记--仓库,聚合和继承,私服搭建
- maven简单应用总结
- 学习笔记之maven2学习总结(2,进阶setting.xml与pom.xml)
- 菜鸡的Django学习笔记(四)博客应用学习总结
- Maven学习笔记(五)---maven的聚合和继承
- Docker学习笔记 — Docker应用场景总结
- 关于文件流的阅读笔记(文件操作相关总结) [[ 应用过 ]]
- CentOS学习笔记 - 9. docker maven编译基于gofabric8的java应用镜像
- maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
- maven笔记4--聚合与继承
- 学习笔记Maven:项目拆分
- maven3.0.4学习笔记(四)-几点总结
- Maven学习总结(五)——聚合与继承
- Maven学习总结(六)——聚合与继承
- 应用中Matlab语句学习笔记总结2
- maven2学习总结(3,maven2在淘宝项目的应用)
- Maven学习总结(五)——聚合与继承