首页 > 其他分享 >Maven知识点

Maven知识点

时间:2023-06-10 18:00:18浏览次数:35  
标签:知识点 依赖 project plugin jar Maven 执行 maven

一、常用标签及属性

  1. maven 依赖属性:groupId、artifactId、version

    groupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有即从远程仓库下载

  2.插件执行: execution,id ,phase,goals,configuration

    execution 配置包含一组指示插件如何执行的属性:

    id : 执行器命名

    phase:在什么阶段执行

      phase执行是有顺序的,如果执行mvn verify,则会顺序执行validate,compile,test和package。

  • validate – 用来验证项目是否正确或者项目所需要的信息是否可用。
  • compile – 用来编译项目代码
  • test – 执行代码中的单元测试
  • package – 将编译后的代码进行打包,打包可有很多种方式,比如:jar,war等
  • verify – 执行集成测试
  • install – 将项目安装到本地仓库中,供有依赖关系的其他项目使用
  • deploy – 将项目部署到远程仓库,以便共享给其他的用户

    goals:执行一组什么目标或功能,定义在maven中的plugin中的,可以包含在Phases里面执行,也可以单独用命令执行。

    configuration:执行目标所需的配置文件

  3.聚合: <modules>

    指将多个模块整合在一起,统一构建,避免一个一个的构建。聚合需要个父工程,然后使用

  4.可选依赖:<optional>

    可选依赖表示这个依赖不是必须的。

  5.排除依赖:<exclusions>

    即排除指定的间接依赖。通过配置 <exclusions> 配置排除指定组件

  6.依赖范围 : <scope>, <systemPath>

    像junit 这个组件我们只有在运行测试用例的时候去要用到,这就没有必要在打包的时候把junit.jar包过构建进去,可以通过Mave的依赖范围配置<scope>来达到这种目的。maven总共支持以下四种依赖范围:

    compile(默认): 编译范围,编译和打包都会依赖。

    provided:提供范围,编译时依赖,但不会打包进去。如:servlet-api.jar

    runtime:运行时范围,打包时依赖,编译不会。如:mysql-connector-java.jar

    test:测试范围,编译运行测试用例依赖,不会打包进去。如:junit.jar

    system:表示由系统中CLASSPATH指定。编译时依赖,不会打包进去。配合<systemPath> 一起使用。

    注:system除了可以用于引入系统classpath中包,也可以用于引入系统非maven收录的第三方Jar,做法是将第三方Jar放置在项目的 lib 目录下,然后配置相对路径,但因system不会打包进去所以需要配合maven-dependency-plugin插件配合使用。 

  7.依赖管理:<dependencyManagement> 

    通过继承的特性,子工程是可以间接依赖父工程的依赖,但多个子工程依赖有时并不一至,这时就可以在父工程中加入

    通过 <dependencyManagement> 可实现在在外面的父pom 中统一管理所有依赖的版本。

<!-- 父工程中声明 junit 4.12 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</dependencyManagement>
<!-- 子工程中引入 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

  8.项目属性: <properties>

  9.maven 依赖引用属性:type

    maven引入依赖,默认使用的type属性为 jar 类型。当需要引用很多依赖并进行统一管理时,则需要在dependencyManagement中声明引用的依赖版本。maven提供了引用类型type为pom类型的依赖,这种依赖可以直接使用该依赖中声明的所有jar的依赖管理。如spring-boot,spring-cloud都提供了这样的依赖支持:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

    子pom使用父pom依赖,则可以直接使用,因为其在上面的pom内部已经声明了引用的版本等信息:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>

  10.maven 默认的属性

${basedir}               项目根目录  
${version}              表示项目版本;  
${project.basedir}          同${basedir};  
${project.version}          表示项目版本,与${version}相同;  
${project.build.directory}       构建目录,缺省为target  
${project.build.sourceEncoding}    表示主源码的编码格式;  
${project.build.sourceDirectory}    表示主源码路径;  
${project.build.finalName}        表示输出文件名称;  
${project.build.outputDirectory}     构建过程输出目录,缺省为target/classes

 

二、常用的maven plugin:maven-dependency-plugin和maven-jar-plugin。

  maven-dependency-plugin:

    maven中的依赖jar包是存放在maven的本地仓库中的,如果项目中依赖了某些jar包,在部署的时候还需要这些依赖的jar包拷贝出来,非常不方便,有了maven-dependency-plugin,则可以借用它的copy-dependencies来将项目的依赖jar包拷贝出来,如下所示:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.1.2</version>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${project.build.directory}/lib
                        </outputDirectory>
                    </configuration>
                </execution>
            </executions>
</plugin>  

    goals是和相应的phase相关联的,在上面的例子中,我们将copy-dependencies和package相关联,则在我们执行mvn package的时候就会自动执行copy-dependencies,从配置文件可以知道,我们将会把项目的依赖jar包拷贝到项目的build目录的lib目录下。

  maven-jar-plugin:

    有了依赖的lib,可以将main程序打包成为一个可执行的jar包。这时候我们就需要使用到maven-jar-plugin。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.flydean.MavenClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
</plugin>  

    为了生成可执行的jar包,我们需要在MANIFEST.MF文件中添加mainClass文件的路径,这样在执行jar包的时候,无需额外的参数即可运行。

    遗憾的是,如果我们的class文件用到了外部jar包的依赖时候,jar包直接运行会出错,因为找不到所依赖的jar包。

    在介绍maven-dependency-plugin的时候,我们已经把所用到的lib拷贝出来了,这里我们可以直接使用:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.flydean.MavenClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

 

引用:https://blog.51cto.com/u_15535797/6076316

   https://blog.csdn.net/weixin_35044595/article/details/112245164

标签:知识点,依赖,project,plugin,jar,Maven,执行,maven
From: https://www.cnblogs.com/Billd/p/17471678.html

相关文章

  • maven自动部署到远程tomcat教程
     maven自动部署到远程tomcat教程使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间。本文章适用于tomcat的7.x,8.x,9.x版本。下面是自动部的步骤1,首先,配置tomcat的manager编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其......
  • 【React工作记录九十五】前端小知识点扫盲笔记记录4
    前言我是歌谣最好的种树是十年前其次是现在微信公众号关注前端小歌谣带你进入氛围极好的前端巅峰人才交流群url参数解析成一个对象<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • 【八股cover#1】MySQL Q&A与知识点
    MySQLQ&A与知识点1、基础知识什么是主键?它用来唯一标识一条记录(一个字段)。每个表都必须有且只能有一个主键,主键的取值不允许为空,而且在表中必须是唯一的(当然还可以有复合主键)。什么是索引?在MySQL中,索引是一种数据结构,用于加速数据库表中的数据检索。它可以看作是一个快速查......
  • Python爬虫基础知识点
    Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢?以下是Python爬虫的基础知识:1......
  • 01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理
    文章目录0、Maven1、Maven简介2、Maven安装配置安装配置步骤3、Maven基本使用Maven常用命令Maven生命周期IDEA配置MavenMaven坐标详解IDEA创建Maven项目IDEA导入Maven项目配置Maven-Helper插件(非常实用的小插件)依赖管理使用坐标导入jar包依赖范围0、Maven1......
  • SpringCloud必会知识点最全(精美版)
    为什么要学习SpringCloud在项目开发中随着业务越来越多,导致功能之间耦合性高、开发效率低、系统运行缓慢难以维护、不稳定。微服务架构可以解决这些问题,而SpringCloud是微服务架构最流行的实现.1.微服务微服务架构是使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业......
  • 总结vue3 的一些知识点:MySQL 运算符
    MySQL运算符本章节我们主要介绍MySQL的运算符及运算符的优先级。MySQL主要有以下几种运算符:算术运算符比较运算符逻辑运算符位运算符算术运算符MySQL支持的算术运算符包括:运算符作用+加法-减法*乘法/或DIV除法%或MOD取余在除法......
  • 总结vue3 的一些知识点:MySQL NULL 值处理
    MySQLNULL值处理我们已经知道MySQL使用SQLSELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:ISNULL: 当列的值是NULL,此运算符返回true。ISNOTNULL: 当列的......
  • 总结vue3 的一些知识点:MySQL 排序
    MySQL排序我们知道从MySQL表中使用SQLSELECT语句来读取数据。如果我们需要对读取的数据进行排序,我们就可以使用MySQL的 ORDERBY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。语法以下是SQLSELECT语句使用ORDERBY子句将查询数据排序后再返回......
  • 总结vue3 的一些知识点:MySQL NULL 值处理
    MySQLNULL值处理我们已经知道MySQL使用SQLSELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:ISNULL: 当列的值是NULL,此运算符返回true。ISNOTNULL: 当列的......