Maven学习(3)-依赖管理-POM文件中依赖的范围定义

来源:

https://www.cnblogs.com/best/p/9676515.html#_lab2_1_2

https://www.cnblogs.com/kabi/p/8509049.html

POM文件中的依赖可以通过<scope>标签定义依赖范围:

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

1. compile : 默认的选择。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

2. test : 表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。

3. provided : 意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

4. runtime : 表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。

5. system : 编译,测试有效。使用此范围的依赖必须通过systemPath元素显式的指定依赖文件,因而,此类依赖是不通过Maven仓库解析的,一般适合于本机测试环境下,依赖本地起的服务。

<scope>的传递:

A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是: 
当C是test或者provided时,C直接被丢弃,A不依赖C; 
否则A依赖C,C的scope继承于B的scope。

 

原文地址:https://www.cnblogs.com/yickel/p/12256595.html

时间: 2024-08-29 16:14:55

Maven学习(3)-依赖管理-POM文件中依赖的范围定义的相关文章

Maven学习(3)-依赖管理-POM文件中依赖的版本管理

pom.xml中依赖的定义样例: <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency></dependencies>

Maven的Pom文件中的隐式依赖导致Jar包冲突的问题

在一次的maven项目中遇到这样一个bug: 编译器没有报什么错,但无法编译,或者能编译,项目启动不了.后来我才发现是以下的问题: 项目中的pom文件中,依赖了webx3.core,而webx3.core又隐式依赖了fasttext相关的jar包,同时我在pom中也引人了fasttext.all, fasttext.all也隐式依赖了fasttext相关的jar包,两类jar包版本还不一样,这样就导致了jar包冲突的问题,牵扯到的pom文件依赖如下: <dependency><group

maven项目,导入的jar包,没有包含在pom文件中,install失败

[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.608s[INFO] Finished at: Thu Feb 05 10:50:14 CST 2015[INFO] Final Memory: 17M/45M[INFO] -------------------------------------------

阿里规范 - 六、工程结构 - (二)二方库依赖 - 9. 【推荐】所有 pom 文件中的依赖声明放在&lt;dependencies&gt;语句块中,所有版本仲裁放在 &lt;dependencyManagement&gt;语句块中。

9. [推荐]所有 pom 文件中的依赖声明放在<dependencies>语句块中,所有版本仲裁放在 <dependencyManagement>语句块中. 说明:<dependencyManagement>里只是声明版本,并不实现引入,因此子项目需要显式的声明依 赖,version 和 scope 都读取自父 pom.而<dependencies>所有声明在主 pom 的<dependencies>里 的依赖都会自动引入,并默认被所有的子项目

idea中的pom文件中的jar包下载不了,手动下载jar包的方法

问题描述: 在pom文件中添加依赖的时候,程序怎么着都是下载不了,而且实验了各种方式: https://www.cnblogs.com/a8457013/p/7811519.html(可以参考,但是本人使用无效) 求取无果,只能自己下载到本地仓库在使用吧: 参考下面博客,可以将jar包下载然后安装到本地,非常感谢大家的分享:特此记录一笔. https://www.cnblogs.com/czy16/p/7569628.html http://www.cnblogs.com/tangshengwe

maven setting 配置仓库,pom.xml中repository不起作用

问题描述 最近做java项目,需要使用公司自己搭建的maven仓库,但是有些包公司的仓库中没有,导致下载失败. 项目环境 jdk:1.8 maven:3.5 问题原因分析 maven的setting文件配置信息如下: <?xml version="1.0" encoding="UTF-8"?> <settings> <localRepository>/data/repository</localRepository>

Idea中maven项目pom文件中已引入testng但项目文件中无法引入@Test

问题: 1.Idea中maven项目的pom.xml文件中引入依赖testng 2.此时可以看到已经出现testng的jar包,ERPLogin.java中引用@Test发现无法引用,然后直接import org.testng.annotations.Test也无法显示 3.但是在test目录下能引用到testng 原因: 在pom.xml文件引用testng的时候,有个标签<scope>test</scope>限制了只能在test目录下使用 1 <dependency>

关于使用命令添加jar进自己的pom文件中-maven项目添加jar包

现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cmd,在里面输入命令 mvn install:install-file -Dfile=想添加jar包的位置(比如E:/AAA.jar) -DgroupId=这个包放在你本地库的位置(例如com.公司名.你这个包的相关起这个名 com.xxxx.BBB) -DartifactId=BBB -Dversi

maven的pom文件中指定编译的版本

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <enc