Maven 高级应用

Maven 基础

Maven 是一个项目管理工具,它有如下好处

  • 节省磁盘空间
  • 可以一键构建
  • 可以跨平台使用
  • 依赖传递和管理,提高开发效率

一键构建:Maven 自身集成了 Tomcat 插件,可以对项目进行编译、测试、打包、安装、发布等操作。

依赖传递和管理:Maven工程真正的 jar 包放置在仓库中,项目中只需要配置上 jar 包的坐标即可。坐标的书写规范,groupId 公司或组织域名的倒序,artifactId 项目名或模块名,version 版本号

坐标示例

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>

仓库的种类和关系

  • 分为本地仓库,远程仓库(私服),中央仓库
  • 启动一个 Maven 工程的时候,pom.xml 会去本地仓库寻找对应的 jar 包,默认情况下,如果本地仓库没有对应的 jar 包,Maven 工程会先私服(如果有)下载 jar 包到本地,如果没有私服,则会从 中央仓库 下载 jar 包到本地

Maven 依赖的作用域

  • compile 默认值,参与当前项目的编译、测试、运行等周期,是一个比较强的依赖,会被打包到最终的 artifact 中。
  • provided 假定对应的依赖会由运行这个应用的 JDK 或者容器来提供,例如 ServletAPI 和 数据库连接。理论上参与编译、测试、运行等周期,不会被打包到最终的 artifact 中。
  • runtime 参与测试、运行期等周期,不参与项目的编译,会被打包到最终的 artifact 中。
  • test 参与测试工作过程中的测试和执行,不会被打包到最终的 artifact 中。
  • system 和 provide 类似,唯一的区别在于它需要使用者告诉 Maven 如何去找到这个依赖。
  • import 从其它的 pom 文件中导入依赖设置,它只在 dependencyManagement 元素下使用,表示从其他 pom 中导入 dependency 的配置。

Maven 常用命令

  • compile 编译源代码
  • test 运行应用程序中的单元测试
  • package 依据项目生成 jar 包
  • install 在本地 Repository 中安装 jar 包
  • deploy 将 jar 包 上传到私服
  • clean 清除目标目录中的生成结果

Maven 生命周期

  • 清理生命周期 在开始真正的项目构建之前进行一些清理工作。
  • 默认生命周期 构建项目的核心部分,包括编译、测试、打包、部署等。
  • 站点生命周期 生成项目报告、站点,发布站点。

传统构建工程

本节源码

定义项目 pom.xml

DAO 层

DAO 层 大致步骤为:

  • 实体类:
  • 持久层接口:
  • DAO 层 Spring 配置文件:
  • 单元测试:

Service 层

Service 层 大致步骤为:

  • 业务层接口:
  • 业务层接口实现类:
  • Service 层 Spring 配置文件:
  • 单元测试:

Web 层

Web 层 大致步骤为:

  • 控制器类:
  • SpringMVC 配置文件:
  • web.xml 配置文件:

JSP 页面

运行和调试

添加 tomcat7 插件,直接点击 run 即可

  <build>
<plugins>
<!-- 添加 tomcat7 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins> </build>

分模块构建工程

本节源码

使用 IDEA 新建一个 Maven 工程,选择 maven-archetype-webapp

  • 创建 ssm_parent 父工程(打包方式选择 pom,必须的)
  • 创建 ssm_web 子模块(打包方式是 war 包)
  • 创建 ssm_service 子模块(打包方式是 jar 包)
  • 创建 ssm_dao 子模块(打包方式是 jar 包)
  • 创建 ssm_domain 子模块(打包方式是 jar 包)
  • web 依赖于 service,service 依赖于 dao,dao 依赖于 domain
  • 在 ssm_parent 的 pom.xml 文件中引入坐标依赖

这就是继承和聚合,通常继承和聚合同时使用。继承,创建一个 parent 工程将所需的依赖都配置在 pom 中。聚合,聚合多个模块运行。

继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本等,可以将这些重复的配置提取出来在父工程的 pom.xml 中定义。

项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web 三个工程最终会打一个独立的 war 运行。

运行和调试

启动方式一:本地 Tomcat 启动

这种方式需要注意选择正确的 Artifacts,比如该项目就应该选择 web 模块。


启动方式二:Tomcat 插件 启动 root,直接点击 run 即可


启动方式三:Tomcat 插件 启动 web 模块,需要先 root install

总结和练习

【Maven】Maven 高级应用的更多相关文章

  1. [Maven]Maven 那点事儿

    0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为"Maven 他爸". 毋庸 ...

  2. Maven - Maven速成

    Maven Maven是一个项目构建和管理工具,有助于开发者快速完成项目的配置,快速建立开发环境,从而提高开发效率. 管理项目构建(build)的生命周期(清理.编译.测试.打包.发布.部署.报告等) ...

  3. 三、maven学习-高级

    maven父子工程

  4. maven 一些高级用法命令

    发布本地jar到私服 命令 mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=D:\Downloads\OJDBC-Full\ojdbc6.ja ...

  5. [Maven]Maven入门教程

    概念 Maven是什么 Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本 maven有自己的版本定义和规则 构建 maven支持许多种的应用程序类型,对于每一种支持的应 ...

  6. [Maven]Maven安装简述

    maven安装简述 1检查jdk安装 1.1cmd输入echo %JAVA_HOME%检查JAVA_HOME是否指向了正确的jdk安装目录 1.2cmd输入java-version检查window是否 ...

  7. [Maven]Maven非常详细完整的教程

    请参考:http://blog.csdn.net/u012152619/article/category/6239920 第四部分已看完 另外也可参看简书:http://www.jianshu.com ...

  8. [Maven]Maven详解

    转自:http://www.cnblogs.com/hongwz/p/5456578.html 一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar ...

  9. [maven] maven变量

    Maven内置变量说明: $${project.basedir}或{basedir} 项目根目录,即包含pom.xml文件的目录 ${project.version}或${version}表示项目版本 ...

  10. Maven——Maven核心概念

    原文:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...

随机推荐

  1. 题解-ARC058D Iroha Loves Strings

    题面 ARC058D Iroha Loves Strings 给定 \(n\) 个字符串,从中选出若干个按给出顺序连接起来,总长等于 \(m\),求字典序最小的,保证有解. 数据范围:\(1\le n ...

  2. AcWing 369. 北大ACM队的远足

    \(\text{Update on 2020.3.25}\) 我之前的做法也有问题,讨论还是不够严谨,导致又有几组(见 打卡评论区)\(\text{Hack}\) 此题数据极水,这里有几种错误写法: ...

  3. Eclipse设置自动提示

    Eclipse设置自动提示可通过以下方式实现, 1.运行Eclipse开发工具,在开发工具最顶端菜单栏,点击"windows"->"preferences" ...

  4. IOS开发中实现UITableView按照首字母将集合进行检索分组

    在开发公司项目中遇到了将图书目录进行按照首字母分组排序的问题 1.在项目添加解析汉字拼音的Pinyin.h文件 /* * pinyin.c */ #define HANZI_START 19968 # ...

  5. php项目从github自动pull到服务器

    php项目github自动pull到服务器 项目名:web 一.自动触发 1.在服务器添加脚本文件:gitpull.sh #!/bin/sh cd /www/web git reset --hard ...

  6. 牛客挑战赛46 C

    题目链接: 排列 考虑\(dp\),我们思考如何设计状态 将第i个数插入i-1个数中,我们考虑会新增多少个超级逆序对 假设将\(i\)插入后\(i\)的位置为\(l\),\(i-1\)的原来的位置为\ ...

  7. js上 四、数据类型转换

    1. 转布尔类型 Boolean():可以将任意类型的数据转为布尔类型: 语法:Boolean(值) 规则:

  8. react第十七单元(redux和组件之间的通信,react-redux的相关api的用法)

    第十七单元(redux和组件之间的通信,react-redux的相关api的用法) #课程目标 什么是redux-redux react-redux的作用是什么 react-redux如何应用 #知识 ...

  9. [JVM工具(1)] 堆栈检查利器jstat的使用

    jstat 可以检查 JVM 整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC 次数和耗时 命令格式 如 jstat -<option> [-t] [-h<line ...

  10. 多任务-python实现-死锁,银行家算法(2.1.5)

    @ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系 ...