这篇文章主要讲解了“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包等等。