IDEA的MAVEN不下载jar包<dependencyManagement>

发布于:2023-01-14 ⋅ 阅读:(513) ⋅ 点赞:(0)

目录

一、问题

二、解决方法

三、详解

1、作用

2、标签作用

3、配置demo


一、问题

怎么调都不下载,检查Maven配置也没有错误

二、解决方法

删掉 pom文件中的 < dependencyManagement >,就开始下载了。

在内部的依赖不会马上到中央仓库中去下载jar包,而是在子工程引用的时候才会去下载jar包

三、<dependencyManagement>详解

1、作用

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。
在dependencyManagement元素中声明所依赖的jar包的版本号等信息,
那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。
Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,
然后使用它指定的版本号。

在父项目的POM.xml中配置:

<!--  数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

此配置即生命了spring-boot的版本信息。

子项目则无需指定版本信息:
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>


如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号。

当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要逐个修改子项目;

另外如果某个子项目需要另外的一个版本,只需要声明version即可。


dependencyManagement中定义的只是依赖的声明,

并不实现引入,因此子项目需要显式的声明需要用的依赖。

2、标签作用

转:https://www.cnblogs.com/Eilen/p/6558591.html

modelVersion:声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
parent:引入父级pom文件。
groupId:公司名称、组织名称、项目开发者,配置时生成路径也是由此生成(包名,如com.XXX)。
artifactId:项目通用名称。
version:对应项目版本号。
packaging:打包后的类型。如war、jar、maven-plugin、ejb、pom、ear、par、rar
name:用户描述项目的名称,可选。
url:项目主页的URL, Maven产生文档时用。

exclusions:排除管理(写在dependency中)。
exclusion:具体要排除的依赖项。
repositories:仓库管理。
repository:具体仓库(有id、name、url子元素)。
properties:自定义标签管理(可在其内自定义标签名、值,用法同于el表达式:${标签名}得到其值),常用于集中定义依赖版本号。
scope:管理部署(可以使用5个值:

    * compile,缺省值,适用于所有阶段,会随着项目一起发布。
    * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
  )。

dependencies:依赖,jar包管理。
dependency:具体的依赖项。
dependencyManagement:依赖,jar包管理。

dependencyManagement和dependencies区别:
 1)dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目

继承(属性全部继承)声明在父项目dependencies里的依赖项。
 2)dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,

是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取

自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。同时dependencyManagement让子项目引用依赖,而不用显示的列

出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个

dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。
 3)dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外

层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven

项目多模块情况时作依赖管理控制的。
 4)pluginManagement和plugins 区别相似,只不过它们用于管理plugin。

build:全局配置(project build),针对当前项目的所有情况都有效。自定义配置(profile build)针对不同的profile配置。
defaultGoal:执行build任务时,如果没有指定目标,将使用的默认值。
finalName:build目标文件的名称,默认情况为${artifactId}-${version}。
include:指定哪些文件将被匹配,以*作为通配符。
excludes:指定哪些文件将被忽略。
resources:用于包含或者排除某些资源文件。
testResources:定义和resource类似,只不过在test时使用
directory:build目标文件的存放目录,就是定义resource文件所在的文件夹,默认在${basedir}/target目录。


plugins:指定使用的插件。

configuration:配置该plugin期望得到的properties。

另外:

modules:一个项目有多个平级模块,也叫做多重模块,或者合成项目,modules实现平级模块管理。
module:具体模块名称(标明该模块和artifactId标签中模块平级),是project标签的子元素。

profiles:自定义配置信息管理
profile:具体自定义配置(可以在不同环境下使用不同的配制文件)
activation:profile的子元素,指该配置的激活条件。Activation是profile的开启钥匙,但不是激活profile的唯一方式。
jdk:当匹配的jdk被检测到,profile被激活。
os:用法同于jdk,当匹配的操作系统属性被检测到,profile被激活。

3、配置demo

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stydy.springcloud</groupId>
    <artifactId>mcroservice</artifactId>
    <!-- 首先修改打包方式 -->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <mysql.version>8.0.27</mysql.version>
        <druid.version>1.2.8</druid.version>
        <junit.version>4.13.1</junit.version>
        <lombok.version>1.18.22</lombok.version>
        <log4j.vsrsion>1.2.17</log4j.vsrsion>
    </properties>

    <!--  因为是总项目 所以用dependencyManagement来管理  因为其他的子项目就不会来管理版本了了 可以直接引用 -->
    <dependencyManagement>
        <dependencies>

            <!-- springcloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- springboot的依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--  数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.8</version>
            </dependency>
            <!-- springboot启动器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.3</version>
            </dependency>
            <!--单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!-- lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.22</version>
            </dependency>

            <!-- log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.vsrsion}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!

本文含有隐藏内容,请 开通VIP 后查看