Maven知识小结

xiaoxiao2021-02-28  95

一、为什么使用Maven 1、拆分项目管理 一个项目就是一个工程,如果项目有很多模块,而每一个模块就对应一个工程,可以借助Maven将一个项目拆分成多个工程 2、管理jar仓库 现在每个企业的开发项目都是比较大的,而这时就需要很多的jar包,有了Maven就无需手动去“复制”、“粘贴”到对应的WEB-INF/lib目录下了,借助Maven,可以将jar仅仅保存在“仓库”中,对有需要使用的工程“费用”这个文件接口,并需要真的把jar包复制过程,这样工程就不会显得很臃肿了的 3、jar包统一规范使用 不同技术的官网会提供的jar包可能会是五花八门的,还有的就是有些技术网站是通过Maven或SVN等专门的工具来提供下载的,如果方式不一样,那jar也不一定规范,借助Maven可以以一种规范的方式下载jar包,因为所有知名度框架或第三方工具的jar包都按照统一的规范存放在了Maven的中央库中 4、jar包依赖管理 FileUpload组件-》IO组件。commons-fileupload-1.3.jar依赖commons-io-2.0.1.jar。Maven可以帮助引进一些需要依赖的jar包。 二、Maven是什么 1、Maven是一款服务于Java平台的自动化构建工具 构建工具都有如下的: Make->Ant->Maven->Gredle 2、构建的概念 以“Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源为“原料”去“生产”一个可以运行的项目的过程,步骤如下: 编译->部署->搭建 编译:Java源文件(User.java)->编译->Class字节码文件[User.class]->交给JVM去执行 部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译”的结果 构建过程的各个环节: [1]清理:将以前的编译得到的旧的class字节码文件删除,为下一次编译做准备 [2]编译:将Java源程序编程成.class字节码文件 [3]测试:自动测试,自动调用junit程序 [4]报告:测试程序执行的结果 [5]打包:动态web工程打war包,Java工程打包jar包 [6]安装:Maven特定的概念->将打包得到的文件复制到“仓库”中指定的位置 [7]部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行 自动化构建 3、安装Maven核心程序 1)检查JAVA_HOME环境变量 C:\Users\admin>echo %JAVA_HOME% 2)解压Maven核心程序包,放到指定目录,如:D:\develop\maven\apache-maven-3.5.0 3)配置Maven相关环境变量 [1]MAVEN_HOME环境变量 D:\develop\maven\apache-maven-3.5.0 [2]配置path环境变量 在path后面的变量加:;%MAVEN_HOME%\bin [3]验证:运行mvn -v或mvn -verson命令查看 4、Maven核心概念 [1]约定的目录结构 [2]POM [3]坐标 [4]依赖 [5]仓库 [6]生命周期/插件/目标 [7]继承 [8]聚合 5、常用Maven命令 [1]注意:执行与构建过程相关的Maven命令,必须进入到pom.xml所在的目录。 与构建过程相关的有:编译、测试、打包、安装、部署等。 [2]常用命令 mvn clear :清理 mvn compile :编译主程序 mvn test-compile :编译测试程序 mvn test :执行测试 mvn package :打包 mvn install :安装 mvn site :生成站点 6、关于连网问题 [1]Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。 [2]当我们执行Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。 [3]本地仓库的默认位置:[系统当前登录用户的家目录]\.m2\repository [4]Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央库下载。 [5]如果此时无法连接外网,则构建失败。 [6]修改默认仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件 修改办法:找到Maven解压目录\conf\setting.xml <localRepository>D:\develop\maven\m2\repository</localRepository> 7、POM [1]含义:Project Oject Model项目对象模型 DOM Document Object Model文档对象模型 [2]pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件进行配置 8、坐标 [1]Maven的坐标 使用如下的三个向量在仓库中唯一定位一个Maven工程 goupid:公司或组织域名倒序+项目名 如:<groupId>com.weisg.maven</groupId> artifactId:模块名 <artifactId>Hello</artifactId> version:版本 <version>0.0.1-SNAPSHOT</version> [2]Maven工程的坐标与仓库中的路径对应的关系 <dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-core</artifactId>    <version>4.3.10.RELEASE</version> </dependency> org/springframework/spring-core/4.3.10.RELEASE/spring-core-4.3.10.RELEASE.jar 如我的:D:\develop\maven\m2\repository\org\springframework\spring-core\4.3.10.RELEASE\目录下 9、仓库 1)仓库的分类 [1]本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务 [2]远程仓库 (1)私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务 (2)中央仓库:架设在Internet上,为全世界所有Maven工程服务 (3)中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度 2)仓库中保存的内容:Maven工程 [1]Maven自身所需要的插件 [2]第三方框架或工具的jar包 [3]我们自己开发的Maven工程 10、依赖[认识] 1)Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。 对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入到指定的仓库中。 2)依赖的范围 [1]compile范围依赖 对主程序是否有效:有效 对测试程序是否有效:有效 是否参与打包:参与 是否参与部署:参与 典型例子:spring-core [2]test范围依赖 对主程序是否有效:无效 对测试程序是否有效:有效 是否参与打包:不参与 是否参与部署:不参与 典型例子:junit [3]provided范围依赖 对主程序是否有效:有效 对测试程序是否有效:有效 是否参与打包:不参与 是否参与部署:不参与 典型例子:servlet-api.jar

11、生命周期

1)各个构建环境执行顺序:不能打乱顺序,必须按照既定的正确顺序来执行。 2)Maven的核心程序中定义了抽象的生命周期,生命周期,生命周期中各个阶段的具体任务是由插件来完成的。

3)Maven核心程序为了更好的实现自动化构建,按照这个特点执行生命周期中的各个阶段:不论现在执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行的。

mvn compile

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

mvn test

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:3.1:testCompile

maven-surefire-plugin:2.12.4:test

测试报告

mvn package

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:3.1:testCompile

maven-surefire-plugin:2.12.4:test

测试报告

maven-jar-plugin:2.4:jar

12、在Eclipse中使用Maven 1)Maven插件:Eclipse内置 2)Maven插件的设置 [1]installations:指定maven核心程序的位置,不建议使用Eclipse自带的maven程序。 [2]user settings:指定conf/settings.xml的位置,方便获取本地仓库的位置 3)基本操作 [1]创建maven版的Java工程 [2]创建Maven版的Web工程 [3]执行Maven命令 13、依赖[深入] 1)依赖的传递性 [1]好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可。 [2]注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果需要就得重复声明依赖。 2)依赖的排除 [1]需要设置依赖排除的场合 [2]依赖排除的设置方式 exclusions 3)依赖的原则 [1]作用:解决模块工程之间的jar包冲突问题 [2]验证路径最短优先原则,验证路径相同时先声明者优先 4)统一管理依赖的版本 建议配置方式,使用properties标签内使用自定义标签统一声明版本号 14、继承 15、聚合 1)作用:一键安装各个模块工程。 2)配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块 利用标签modules

3)使用方式:在聚合工程的pom.xml上点击右键->run as ->maven install

特殊配置:

<!-- 配置当前工程构建过程中的特殊设置 --> <build> <finalName>AtguiguWeb</finalName> <!-- web项目执行mvn deploy命令时必须要配置的,不然会报错 --> <!-- 配置构建过程中需要使用的插件 --> <plugins> <plugin> <!-- cargo是一家专门从“启动Servlet容器”的组织 --> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.6.4</version> <!-- 针对插件进行的配置 --> <configuration> <!-- 配置当前系统中容器的位置 --> <container> <containerId>tomcat8x</containerId> <home>D:\develop\tomcat\apache-tomcat-8.0.29-practice</home> </container> <configuration> <type>existing</type> <home>D:\develop\tomcat\apache-tomcat-8.0.29-practice</home> <!-- 如果Tomcat端口为默认值8080则不必设置该属性 --> <!-- <properties> <cargo.servlet.port>8989</cargo.servlet.port> </properties> --> </configuration> </configuration> <!-- 配置插件在什么情况下执行 --> <executions> <execution> <id>cargo-run</id> <!-- 生命周期的阶段 --> <phase>install</phase> <goals> <!-- 插件的目标 --> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

最后在命令窗口里执行:mvn deploy 

这个部署一定要到项目的pom.xml所在的目录如,如 :E:\WorkSpace\eclipse\workspace\ssh-web

如果在Eclipse执行,最后关不了,会有窗口占用的情况

如下的这个插件配置可以在web项目中使用,这样打包war的时候就可以把依赖的jar包打到lib下了

<plugin>       <artifactId>maven-dependency-plugin</artifactId>           <executions>           <execution>               <phase>install</phase>               <goals>                   <goal>copy-dependencies</goal>               </goals>               <configuration>                   <outputDirectory>${project.build.directory}/lib</outputDirectory>               </configuration>           </execution>       </executions>    </plugin>

转载请注明原文地址: https://www.6miu.com/read-65509.html

最新回复(0)