`

maven第二节-maven基础-依赖管理

 
阅读更多

 1.maven常用命令
mvn archetype:create :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件或者打zip包
mvn install :在本地 Repository 中安装 jar

mvn deploy:发布到私服上
mvn eclipse:eclipse :生成 Eclipse 项目文件
mvn -Dmaven.test.skip=true : 忽略测试文档编译
mvn archetype:generate 你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.
mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用: 1. 跳过测试:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.
mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用
mvn dependency:sources 故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了    

2.依赖      

  使用 Maven 可以方便的管理依赖,如下是一段在 pom.xml 文件中声明依赖的代码示例:

 

 

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>3.2.0.RELEASE</version>
        <type>jar</type>
        <scope>test</scope>
        <systemPath>${java.home}/lib/rt.jar</systemPath>
        <optional>false</optional>
        <exclusions>
            <exclusion></exclusion>
        </exclusions>
    </dependency>
</dependencies>

type:依赖类型,对应构件中定义的 packaging,可不声明,默认为 jar;

 

scope:依赖范围;

optional:依赖是否可选;

exclusions:排除传递依赖。

                                                                                                               

 3.maven依赖关系中Scope的作用 

执行不同的 Maven 命令(mvn package,mvn test,mvn install ……),会使用不同的 classpath,Maven 对应的有三套 classpath:编译classpath、测试classpath,运行classpath。scope 选项的值,决定了该依赖构件会被引入到哪一个 classpath 中。

 

compile:编译依赖范围,默认值。此选项对编译、测试、运行三种 classpath 都有效,如 hibernate-core-3.6.5.Final.jar,表明在编译、测试、运行的时候都需要该依赖;

test:测试依赖范围。只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;

provided:已提供依赖范围。编译和测试有效,运行无效。如 servlet-api ,在项目运行时,tomcat 等容器已经提供,无需 Maven 重复引入;

runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;

system:系统依赖范围。和 provided 依赖范围一致,需要通过 <systemPath> 显示指定,且可以引用环境变量;

import:导入依赖范围。使用该选项,通常需要 <type>pom</type>,将目标 pom 的 dependencyManagement 配置导入合并到当前 pom 的  dependencyManagement 元素。


4.maven的坐标


maven 的所有构件均通过坐标进行组织和管理。maven 的坐标通过 5 个元素进行定义,其中 groupId、artifactId、version 是必须的,packaging 是可选的(默认为jar),classifier 是不能直接定义的。

 

groupId:定义当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一一对应。

artifactId:定义当前 Maven 项目的一个模块,默认情况下,Maven 生成的构件,其文件名会以 artifactId 开头,如 hibernate-core-3.6.5.Final.jar。

version:定义项目版本。

packaging:定义项目打包方式,如 jar,war,pom,zip ……,默认为 jar。

classifier:定义项目的附属构件,如 hibernate-core-3.6.6.Final-sources.jar,hibernate-core-3.6.6.Final-javadoc.jar,其中 sources 和 javadoc 就是这两个附属构件的 classifier。classifier 不能直接定义,通常由附加的插件帮助生成。 

5.maven依赖

依赖冲突

通常我们不需要关心传递性依赖,当多个传递性依赖中有对同一构件不同版本的依赖时,如何解决呢?

 

短路径优先:假如有以下依赖:A -> B -> C ->X(版本 1.0) 和 A -> D -> X(版本 2.0),则优先解析较短路径的 X(版本 2.0);

 

先声明优先:若路径长度相同,则谁先声明,谁被解析,如果希望精确的空子依赖包,可以使用依赖的排除功能

依赖排除

  针对依赖冲突中的“短路径优先”,如果我们想使用长路径的依赖怎么办呢?这时可以使用依赖排除 <exclusions> 元素,显示排除短路径依赖。在非冲突的情况下,这种方法同样有效。

6.maven常用变量

      在配置 pom.xml 文件时我们经常会使用到一些 Maven 中提前定义好的变量来统一控制某些关键参数,使得 pom 文件的管理更为合理。

        注:在 Maven 的 3.X 版本以后,所有的 pom.* 参数全部改为了 project.*。

 

        Maven 开发中使用的 ${XXX} 类型的参数大体可分为7类:

 

1.Built-in properties  内置参数

        ${basedir} 代表项目中 pom.xml 文件所在的文件夹;

        ${version} 代表项目的版本,等价于 ${project.version}(老版本中的 ${pom.version}),即 pom 文件中<version></version>标签内定义的版本号。

 

2.Pom/Project properties  Pom/项目参数

        所有在 pom 文件中定义的项目相关元素,可通过 project. 前缀(老版本中的 pom. 前缀)来进行引用。

        ${project.build.directory} 代表了项目编译后的目录,等同于 ${pom.project.build.directory},默认为“target”;

 

        ${project.build.outputDirectory} 代表了项目输出目录,默认为“target/classes”;

        ${project.name} 代表了项目名称(老版本中的 ${pom.name}),即 pom 文件中<name></name>标签内定义的项目名称;

        ${project.build.finalName} 代表了项目最终打包后生成文件的名称,即 pom 文件中<finalName></finalName>标签内定义的项目打包名称。

 

3.Local user settings  用户本地配置参数

        在用户 settings.xml 文件中定义的元素,可通过 settings. 前缀来进行引用。

        ${settings.localRepository} 代表了本地仓库路径,即 settings 文件中定义的本地仓库路径。

4.Environment variables  环境变量

        系统环境变量可以通过 env. 前缀来进行引用。

        ${env.M2_HOME} 代表了环境变量中配置的 M2_HOME 的值;

        ${java.home} 代表了环境变量中配置的 JAVA_HOME 的值。

 

5.Java system propertie  Java 系统参数

        同样可以引用 JVM 中定义的 Java 系统参数。

6.Custom properties in the POM  用户自定义参数

        用户在 pom.xml 文件中可自定义参数,并进行引用。

        ${jdk.version} 代表了 JDK 的版本参数,即 pom 文件中<properties></properties>标签内定义的<jdk.version></jdk.version>标签中的值。

 

7.Parent Project variables  父级参数

        父级 pom.xml 文件中定义的元素,可通过 parent. 前缀来进行引用。

        ${parent.version} 代表了 父级 pom 文件中<version></version>标签内定义的版本号。

 

 

 

  • 大小: 20 KB
分享到:
评论

相关推荐

    apache-maven-3.3.9-bin

    不过,如果这个项目与Maven构建有关,那么它可能是一个使用Maven管理的子项目,或者是需要通过Maven进行集成和部署的第三方服务。 总的来说,Apache Maven 3.3.9提供了一套强大而灵活的构建工具,能够帮助Java...

    Maven之Spring Boot--网络商城系统基础版

    Maven是一个项目管理工具,用于构建、依赖管理和项目信息管理。在这个项目中,Maven负责管理项目的构建过程,通过`pom.xml`文件定义项目依赖,自动下载并管理所需的库文件,确保所有组件能够正确集成和运行。 2. *...

    Maven的安装包:apache-maven-3.6.1-zip

    Apache Maven 是一个强大的Java项目管理工具,它基于项目对象模型(Project Object Model, POM)的概念,能够自动化构建、依赖管理和项目信息管理。Maven 的核心理念是通过标准化项目结构和依赖管理,简化Java开发...

    apache-maven-3.2.5.rar

    Maven有两个主要的仓库:本地仓库(Local Repository)存储已下载的依赖,全局仓库(Remote Repository)包含公开的第三方库,如Central Repository。 9. **Maven的命令行工具**: Maven提供了命令行工具`mvn`,...

    apache-maven-3.9.6版本安装包

    2. **解压**:使用解压缩工具(如内置的“Finder”或第三方软件)打开并解压下载的文件到你希望安装的位置,比如`/usr/local/`目录下。 3. **配置环境变量**:为了让系统能够找到Maven,你需要编辑`~/.bash_profile...

    doris-1.1.3源码编译broker-maven依赖包repository

    Maven 是一个项目管理和综合工具,用于自动化构建、依赖管理和项目信息管理。在Doris中,Maven 负责管理项目的构建过程,确保所有依赖项正确无误地被引入。在编译Doris源码时,Maven的`pom.xml`文件是关键,它定义了...

    apache-maven-3.6.3.zip

    2. **NOTICE**: 此文件通常包含对Maven中使用的第三方库的版权和许可信息,提醒用户注意这些依赖项可能需要遵守的额外条款。 3. **README.txt**: 这是一个标准的文本文件,可能会包含关于如何安装、配置和使用Maven...

    apache-maven-3.9.6-bin.zip

    Apache Maven 是一个强大的项目管理和构建工具,可用于 Java 项目的构建、依赖管理和项目管理。Apache Maven 3.9.6-bin 是 Apache Maven 的一个特定版本,其中的“bin”表示这是二进制分发版,适用于直接使用而无需...

    apache-maven-3.5.2.zip

    Maven通过其中央仓库系统,使得开发者可以方便地引用和管理项目所需的第三方库(jar文件)。在`pom.xml`文件中,开发者可以声明项目依赖,Maven会自动下载并管理这些依赖,避免了版本冲突和手动管理jar文件的繁琐...

    官方下载maven-3.5.4

    2. **NOTICE**:通知用户关于软件中包含的第三方库和组件的版权信息,以及可能需要遵循的额外许可条款。 3. **README.txt**:提供了关于如何安装、配置和使用 Maven 的基本指南,是新用户快速上手的重要文档。 4. ...

    apache-maven-3.1.0-bin.zip

    "maven"是项目名称,"maven3"表明这是Maven的第三个主要版本,"maven3.1"特指3.1系列,而"apache-maven"是项目的全称,表明它是由Apache软件基金会维护的。 在"压缩包子文件的文件名称列表"中,我们只有一个条目:...

    apache-maven-3.6.0

    2. **依赖管理**:Maven通过POM中的依赖配置自动下载并管理项目所需的所有库,避免了手动管理jar文件的繁琐工作。只需在POM中声明依赖,Maven会自动解决依赖关系,并从Maven仓库中下载。 3. **构建生命周期**:...

    jodconverter2.2.2.jar Maven依赖包

    标题“jodconverter2.2.2.jar Maven依赖包”涉及到的是一个Java开发中的关键组件,即JODConverter库的一个特定版本。JODConverter是一个开源的文档转换工具,它允许用户在Java应用程序中方便地将各种Office文档格式...

    apache-maven-3.5.4-bin.zip

    Apache Maven 是一个强大的项目管理工具,它主要用于Java项目的构建、依赖管理和项目信息管理。Maven 使用一种标准化的项目对象模型(Project Object Model,POM),通过POM来管理和描述项目。`apache-maven-3.5.4-...

    Maven 3 入门 -- HelloWorld

    创建 Maven 项目的第一步是编写 `pom.xml` 文件,这是 Maven 的核心,包含了项目的元数据,如项目名称、版本、依赖等。一个基本的 `pom.xml` 文件如下: ```xml &lt;project xmlns="http://maven.apache.org/POM/4.0.0...

    apache-maven-3.1.1-bin.tar 

    Apache Maven 是一个强大的项目管理工具,广泛用于Java应用程序的构建、管理和依赖管理。"apache-maven-3.1.1-bin.tar.gz" 是Maven 3.1.1版本的二进制发行版的压缩文件,它包含了运行Maven所需的所有组件。这个...

    黑马maven笔记,第一天

    1. **依赖管理**:Maven提供了对jar包的统一管理,能够有效地减少项目中的jar包冲突问题,同时也节省了大量的存储空间。 2. **一键构建**:Maven支持从编码、编译、测试到部署的一键式操作,大大提高了开发效率。...

    apache-maven-3.6.2.zip

    2. **NOTICE**:此文件包含了对Maven项目中使用的第三方库和代码的版权信息和许可通知。遵循这些通知可以确保你在使用Maven时遵守所有相关的开源软件许可证。 3. **README.txt**:通常,这是一个文本文件,提供了...

    maven_archetype

    Maven Archetype 是 Apache Maven 项目管理工具中的一个重要概念,它主要用于创建项目的初始结构。Maven Archetype 并非一个简单的模板,而是一种可重复使用的构建模块,能够根据预定义的配置生成一个新的 Maven ...

Global site tag (gtag.js) - Google Analytics