Maven的简介及使用
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仓库