Maven学习后续

Posted 听路走歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven学习后续相关的知识,希望对你有一定的参考价值。

学习笔记仅供参考,如有错误,请多指出

                                               java学习路上,与君共勉

​                                                                                                                                                                                                                                                                                                      作者:小饭


前言

原理操作来源于狂神说java的视频,所用图片来源于网络

基本上是看b站视频自己摘抄的笔记,保存到csdn是为了把笔记精华分享给大家,以及方便自己复习

Maven简介

1.1 简介

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档项目管理工具软件。

Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。

1.2 项目构建工具

Ant构建

最早的构建工具,xml脚本编写格式让xml文件特别大,对工程构建过程的过程控制特别好

Maven【java】

项目对象模型,通过其描述信息来管理项目的构建,报告和文档的然间项目管理工具,填补了Ant缺点,支持从网络下载的功能,采用xml作为配置文件格式,Maven专注于依赖管理,使用java编写

Gradle

结合以上两个的优点,继承了Ant和Maven的生命周期管理,被谷歌作为android御用管理工具,不使用xml作为配置文件格式,采用DSl格式,脚本更加简介

目前Ant比较老,一般为比较传统的软件公司使用;Maven使用java编写,是当下绝大多数公司使用的一个构建工具,中文文档也比较全面;gradle使用groovy编写,目前为一些初创公司使用

1.3 Maven的四大特性

依赖管理

Maven 为 java 世界引入了一个新的依赖管理系统:jar 包管理。当需要使用某个 jar 包时,不需要再从网络上下载并导入了,只需要配置其依赖即可;而当 jar 包需要升级时,也不需要重新下载最新的包并重新导入,只要修改 pom.xml 配置文件即可。在 java 世界中,可以用 groupId、artifactId、version 组成的 Coordination(坐标)唯一标识一个依赖。

  同时,任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 jar 包,也可以是 war 包。一个典型的依赖引用如下所示:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

坐标属性的理解

  Maven 坐标为各种组件引入了秩序,任何一个组件都必须定义自己的坐标。

groupId:定义当前Maven项目隶属的实际项目-公司名称(jar 包所在仓库路径)。由于 Maven 中模块的概念,因此一个实际项目往往会被划分为很多模块。比如 Spring 是一个实际项目,其对应的 Maven 模块会有很多,如spring-core、spring-webmvc等。 artifactId:该元素定义实际项目中的一个 Maven 模块-项目名,推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如,spring-bean、spring-webmvc等。 version:该元素定义 Maven 项目当前所处的版本。

多模块构建

项目复查时,使用将 dao、service、controller 层分离的方式,将一个项目分解为多个模块已经是一个很通用的方式。

在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 <modules> 标签来定义一组子模块。parent POM 不会有什么实际构建产出,而 parent POM 中的 build 配置以及依赖配置都会自动继承给子模块。

一致的项目结构

在 Ant 时代,大家创建 java 项目目录时比较随意,然后通过 Ant 配置指定哪些属于 source,哪些属于 testSource等。并且,不同的 IDE (IDEA和Eclipse)创建项目时,目录结构是不一样的,这就会导致两种 IDE 的项目不能兼容导入。而 Maven 在设计之初的理念就是 “Conversion over configuration”(约定大于配置),其制定了一套统一的项目目录结构作为标准的 java maven 项目结构,解决了不同 IDE 带来的文件目录不一致问题,只要是 Maven 项目,在各个 IDE 中建立的项目结构都是一样的。

一致的构建模型和插件机制

在编写 JavaWeb 项目时需要使用类似 tomcat 的服务器,我们可以通过插件的形式将服务器引入进来。例如,如果需要使用 jetty 的服务器,可以通过下面的配置将 jetty 服务器引入进来。

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.25</version>
    <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <contextPath>/test</contextPath>
    </configuration>
</plugin>
​

1.4 Maven的目录结构

Maven约定:

src/main/java 存放项目的java类源文件,即:Xxx.java

src/main/resources 存放项目的资源文件,如spring、mybatis的配置文件等等

src/test/java 存放项目的用于测试的java类源文件,即:XxxTest.java

src/test/resources 存放项目的测试相关的资源文件

      

 

1.5 Maven命令(一部分)

 

主要几个常用命令

(1)maven clean。

对项目进行清理,清理的过程中会删除删除target目录下编译的内容。

(2)maven compile。

编译项目源代码。

(3)maven test。

对项目的运行测试。

(4)maven packet。

可以把打包后的文件存放到项目的 target 目录下,打包好的文件通常都是编译后生成的class文件。

(4)maven install。

在本地仓库生成仓库的安装包可以供其他项目引用,同时打包后的文件存放到项目的 target 目录下。

对项目打包有三种打包方式,pom打包,jar包和war包。打包方式在pom.xml文件中进行指定。

pom工程一般是聚合工程,代表父工程,负责管理jar包的版本、maven插件的版本等,主要做统一的依赖管理。

jar包就是普通的打包方式,可以是pom工程的子工程。

war包的都是web工程,是可以直接放到tomcat下运行的工程。

1.6 Maven创建项目

普通项目

 

web项目

 接下来的构建,两个都一样

 

构建完成

tomcat集成运行:

Run—>Edit Configurations

 

Maven仓库

基本概念:

当第一次运行Maven命令的时候,你需要Internet链接,因为它需要从网上下载一些文件。那么它从哪里下载呢?它是从Maven默认的远程库下载的。这个远程仓库有Maven的核心插件和可供下载的jar文件。

当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。

远程仓库分为三种:中央仓库,私服,其他公共库(阿里云)。中央仓库是默认配置下,Maven下载jar包的地方。

私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。

默认情况下,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。有时候,因为某些原因(比如c盘空间不足),需要修改本地仓库目录地址。

对于仓库路径的修改,可以通过maven配置文件conf目录下settings.xml来指定仓库路径

Maven环境下构建多模块项目

  1. 模块 maven_parent —– 基模块,就是常说的parent (pom)

  2. 模块 maven_dao —– 数据库的访问层,例如jdbc操作(jar)

  3. 模块 maven_service —– 项目的业务逻辑层 (jar)

  4. 模块 maven_controller —– 用来接收请求,响应数据 (war)

Maven打包操作

对于企业级项目,无论是进行本地测试,还是测试环境测试以及最终的项目上线,都会涉及项目的打包操作。对于每个环境下的项目打包,对应的项目所需要的配置资源都会有所区别,实现打包的方式有很多种,可以通过ant,或者通过idea自带的打包功能实现项目打包,但当项目很大并且需要的外界配置很多时,此时打包的配置就会异常复杂,对于maven项目,我们可以用过pom.xml配置的方式来实现打包时的环境选择,相比较其他形式打包工具,通过maven只需要通过简单的配置,就可以轻松完成不同环境下项目的整体打包。

建立对应的目录结构

 

并且在对应目录中写入响应的配置和xml文件

打包操作:

clean compile package -Pdev -Dmaven.test.skip=true

clean:清楚缓存

-P:找到为dev的路径 -Pdev -Dmaven.test.skip=true 去掉测试代码

Maven依赖

了解即可

以上是关于Maven学习后续的主要内容,如果未能解决你的问题,请参考以下文章

Maven学习后续

使用后续突变和缺失片段中继 commitUpdate 回调

springboot 学习笔记

js常用代码片段

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

中小型项目的 Maven 学习曲线和开销?