Maven的简介及使用
制作人:全心全意
Maven定义: Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
1、Maven作为Apache的一个开源项目,意在给项目管理提供更多的支持,它最早的意图只是为了给apache组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。
2、Maven中最值得称赞的就是使用了标准的目录结构和部署。
3、在多个开发团队环境的情况下,Maven可以设置标准。由于大部分的项目设置简单可重复使用,使Maven开发容易,创建报告,检查,生产和测试完全自动化设置。
4、Maven是一个项目构建和管理的工具,提供了帮助管理、构建、文档、报告、依赖、scms、发布、分发的方法,可以方便的编译代码、进行依赖管理、管理二进制库等等。
pom.xml:声明项目中需要的jar包
local repostory:本地仓库(默认在用户目录下的.m2目录中)
remote repostory:网络仓库(https://mvnrepository.com/)
pom中声明的jar包,本地仓库中有的,直接在本地仓库引用,没有的,从网络仓库中下载到本地仓库,再进行引用。
maven采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,在执行maven任务时,才会自动下载需要的插件。
mirror相当于一个拦截器,他会拦截maven对remote repostory(远程仓库)的相关请求,将请求里的仓库地址,重定向到mirror里配置的地址
坐标
定义:标识时空中的某个点,方便人们找到位置
分类:
groupId:组织ID,一般是公司/团体名称
artifactId:实际项目的ID,一般是项目/模块名称
version:版本,开发中的版本一般打上SNAPSHOT标记
Type/packaging:包类型,如JAR、EAR、POM...
classifier:分类,如二进制包、源、文档
通过这个规则就可以定位到世界上任何一个构件。
依赖:
maven中的依赖可以传递依赖,但不可循环依赖,遵守了最短路径优先和第一声明优先。
A1.0 B1.0 C1.0 C2.0
例如:A(声明引用B1.0和C2.0)、B(声明引用C1.0)
最后引用的是C2.0
例如:A(声明引用C1.0,再声明引用C2.0)、B(声明引用C1.0)
最后引用的是C1.0
maven有三套classpath,分别为编译classpath、运行classpath、测试classpath,对应三个阶段
依赖范围:在pom.xml中使用scope声明
complie:编译依赖范围,再三个classpath都有效,默认的
test:测试依赖范围,在编译代码和运行代码中都无效,打包时不会导入包中
provided:在编译和测试的时候有效,再运行时无效(例如servlet-api,在运行时由容器提供)
runtime:运行时依赖范围,仅在测试和运行的时候有效。
system:系统依赖范围,与provided范围一致,但是依赖时通过系统环境变量来指定,不利于移植
eclipse中maven项目结构说明:
src/main/java:项目源码
src/main/resource:资源文件,如properties文件
src/main/webapp:web项目相关的资源文件,如web.xml
src/test/java:测试用的源码
src/test/resource:测试用的源文件
target/classes:编译后的文件
target/test-classes:编译后用于测试的文件
pom.xml:maven声明文件
声明导入包示例
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
声明变量
<!-- 声明版本变量 -->
<properties>
<spring.version>4.3.24.RELEASE</spring.version>
</properties>
引用:
<version>${spring.version}</version>
依赖时排除相关依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion> <!-- 排除spring-core和相关依赖 -->
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
声明引用本地jar包
<dependency>
<groupId>com.zq.myjar</groupId>
<artifactId>com-myjar</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>本地jar包路径</systemPath>
</dependency>
maven的下载地址:http://maven.apache.org/download.cgi
安装自己的maven服务:依赖java环境
将下载的maven进行解压
bin:命令文件
boot:依赖的jar包
conf:配置文件
lib:程序运行所需要的jar包
配置环境变量MAVEN_HOME和PATH
配置文件(conf/settings.xml)
localRepositLory:自定义本地仓库的存放位置(路径)
<localRepository>E:\maven_data</localRepository>
mirrors:配置中央仓库的地址
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun_maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> <!-- 阿里的maven仓库 -->
</mirror>
</mirrors>
配置默认的JDK
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
eclipse中使用自己的maven服务:
在首选项的maven中,installations中添加自己的maven仓库,User Settings中导入maven的配置文件
eclipse中maven项目使用其它maven项目的引用
配置maven项目的id到pom.xml中
<dependency>
<groupId>com.zq.myjar</groupId>
<artifactId>com-myjar</artifactId>
<version>1.0</version>
</dependency>
继承1:父项目打包方式为pom,子项目加入依赖后,即可继承父项目的依赖
packageing:打包方式
jar
war
pom
如果当前项目和父项目的groupId和version相同,可在pom.xml中省略这两项
继承2:在父项目中对依赖的声明使用dependencyManagement包含,则子项目不会继承,需在子项目重新声明,省略version。在父项目使用变量声明版本,在子项目重新声明会覆盖父项目的变量值。
如果父项目加入了依赖管理器(dependencyManagement),那么子项目必须手动声明需要的依赖,如果当前依赖父项目存在,可以不指定版本号,如果没有,那么必须有GAV坐标。
//maven打包(jar包,pom配置)
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 此处指定main方法入口的class -->
<mainClass>com.lingjoin.test.KGB.EyeCheckerTest</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven命令
Eclipse:
Run as maven install:将项目进行打包,并将当前包放入本地的maven仓库
Run as maven clean:清除target里面编译的文件
Run as maven build:构建项目的规则
tomcat7:run == mvn tomcat7:run
package:将项目进行打包,仅打包
clean:清除target里面编译的文件
窗口命令:在项目的pom.xml文件所在目录
mvn -version:查看maven版本
mvn tomcat7:run:以tomcat7运行项目(在拷贝的项目中,pom.xml同级目录执行)
mvn clean:清除项目编译的文件
mvn package:生成war包
mvn install:将项目进行打包,并将当前包放入本地的maven仓库