Maven范围的概念及分类说明

  介绍

这篇文章主要讲解了“Maven范围的概念及分类说明”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Maven范围的概念及分类说明”吧!

范围


范围定义了类包在项目的使用阶段。项目阶段包括:<强>编译,运行,测试和发布

 Maven范围的概念及分类说明

分类说明

<李>

编译:,默认为编译范围,表示为当前依赖参与项目的编译,测试和运行阶段,属于强依赖。打包之时,会达到包里去。

<李>

测试:,该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。

<李>

运行时:,依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql, oracle等等数据的驱动程序只此类的驱动都是为运行时的类库。

<李>

provided :该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译,测试和运行等周期,与编译等同区。别在于打包阶段进行了排除操作。

<李>

system :使用上与提供相同,不同之处在于该依赖不从Maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。

<李>

import :这个是maven2.0.9版本后出的属性,进口只能在dependencyManagement的中使用,能解决Maven单继承问题,进口依赖关系实际上并不参与限制依赖关系的传递性。

举例说运行时

<强>首先要知道Maven中引入的jar包依赖都是已经编译好的可以直接使用的*。类文件强壮!然后比如runtime 类型的java的jdbc链接,官方已经提供好连接工具包了。我们在调用的时候一定是通过反射来加载好驱动的从而链接数据库。

 & lt; dependency>
  ,,,& lt; groupId> mysql
  ,,,& lt; artifactId> mysql-connector-java
  ,,,& lt; version> 5.1.26
  ,,,& lt; scope> runtime
  & lt;/dependency> 

依赖JDBC的演示如下:

 package  com.sowhat.Demo01;
  
  import  java.sql.Connection;
  import  java.sql.DriverManager;
  import  java.sql.ResultSet;
  import  java.sql.SQLException;
  import  java.sql.Statement;//提供获取连接的方法
  public  class  JDBCUtils  {
  
  private  static  Connection 康涅狄格州=零;
  
  静态{,,,
  ,,,,,,,try  {
  ,,,,,,,,,,,forname (“com.mysql.jdbc.Driver");
  ,,,,,,,,,,,String  url=癹dbc: mysql://localhost: 3306/商品? characterEncoding=utf-8";
  ,,,,,,,,,,,String 用户名=皉oot";
  ,,,,,,,,,,,String 密码=?23456”;
  ,,,,,,,,,,,康涅狄格州=DriverManager.getConnection (url、用户名、密码);
  ,,,,,,,},catch  (Exception  e), {
  ,,,,,,,,,,,//,TODO  Auto-generated  catch 块
  ,,,,,,,,,,,throw  new  RuntimeException (e +“数据库连接失败“);
  ,,,,,,,},
  ,,,,,,,
  ,,,}
  ,,,//获取数据库连接对象
  ,,,public  static  Connection  getConnection () {
  ,,,,,,,return 康涅狄格州;
  ,,,}
  ,,,//关闭数据库的方法
  ,,,....
  }

systemPath:

当maven依赖本地而非库中的jar包,sytemPath指明本地jar包路径,例如:

 & lt; dependency>
  ,,,& lt; groupid> org.hamcrest
  ,,,& lt; artifactid> hamcrest-core
  ,,,& lt; version> 1.5 & lt;/version>
  ,,,& lt; scope> system
  ,,,& lt; systempath> $ {basedir}/WebContent/web - inf/lib/hamcrest-core-1.3.jar
  & lt;/dependency> 

依赖中类型的


引入某一个依赖时,必须指定类型,这是因为用于匹配依赖引用和dependencyManagement部分的最小信息集实际上是{groupId, artifactId类型,分类器}。在很多情况下,这些依赖关系将引用没有分类器的jar依赖。这允许我们将标识设置为{groupId, artifactId},因为类型的默认值是jar,并且默认分类器为零只
类型的值一般有jar,战争、pom等,声明引入的依赖的类型
,

依赖中的分类器


分类器可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。设想这样一个情况,有一个jar项目,就说狗是- cli - 1.0。jar吧,运行它用户就能在命令行上画一只小狗出来。现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,这是比较正式的分发包。这个文件名应该是怎样的呢? dog-cli-1.0.zip ?不够清楚,仅仅从扩展名很难分辨什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是狗- cli - 1.0 - dist.zip就最好了。这里的dist就是分类器,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,就能用上分类器。常见的分类器还有如狗- cli - 1.0 - sources.jar表示源码包,狗- cli - 1.0 - javadoc。jar表示JavaDoc包等等。

Maven范围的概念及分类说明