首页 > 技术文章 > Maven的简介及使用

zhangquan-yw 2020-11-22 21:47 原文

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仓库

推荐阅读