maven基础知识

1.maven基础知识                                                                                                                                             

1.1maven坐标                                                                                                                                             

  • maven坐标通常用冒号作为分割符来书写,像这样的格式:groupId:artifactId:packaging:version。项目包含了junit3.8.1,则包含了对junit:junit:jar:3.8.1的依赖。

groupId

d 团体,公司,小组,组织,项目,或者其他团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。

artifactId

在groupId下的表示一个单独项目的唯一标识符。

version

一个项目的特定版本。

项目打包格式也是maven坐标的重要组成部分,但是他不是项目唯一标识符的一个部分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个同样的groupId,artifactId和version标识的项目。

packaging

项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个jar文件,类型为war的项目产生一个web应用。

1.2maven依赖                                                                                                                                        

  •  maven支持传递性依赖(transitive dependencies)。假如你的项目依赖于一个库,而这个库又依赖其他,maven自动加入这些,也可以排除一些特定的传递性依赖。
  • maven中的一个依赖不仅仅是一个jar,他是一个pom(project object model)文件,这个pom可能声明了对其他构建的依赖。
  • maven提供了不同的依赖范围(dependency scope)。simple项目包含了一个依赖:--junit:junit:jar:3.8.1---范围test。当一个依赖的范围是test的时候,说明它在compiler插件运行compile目标的时候是不可用的。它只有在运行compiler:testCompile和surefire:test目标的时候才会被加入到classpath中。
  • 当为项目创建jar文件的时候,它的依赖不会捆绑在生成的构件中,他们只是用来编译。当maven来创建war或jar,你可以配置maven让它在生成的构件中捆绑依赖,也可以用provided范围,让它排除war文件中特定的依赖。provided范围告诉maven一个依赖在编译的时候需要,但是它不应该被捆绑在构件的输出中。当你开发web应用的时候provided范围变得十分有用,你需要Servlet API来编译你的代码,但是你不希望Servlet API的jar文件包含在你的web应用的web-inf/lib目录中。
  • compile(编译范围)
  • compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时他们也会被打包。
  • provided(已提供范围)
  • provided依赖只有在当jdk或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet api;这个servlet api jar由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可以用。他们不是传递性的,也不会被打包。
  • runtime(运行时范围)
  • rentime依赖在运行和测试系统的时候需要。但在编译的时候不需要。比如,你可能在编译的时候只需要jdbc api jar,而只有在运行的时候才需要jdbc驱动实现。
  • test(测试范围)
  • test范围依赖在一般的编译和运行时都不需要,他们只有在测试编译和测试运行阶段可用。
  • system(系统范围)
  • system范围依赖与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径。这么做事为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,maven也不会在仓库中寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。这一该范围是不推荐使用的。
1 <dependency>
2     <groupId>org.apache.poi</groupId>
3     <artifactId>poi-ooxml</artifactId>
4     <version>3.6</version>
5     <scope>system</scope>
6     <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/poi-ooxml-3.6.jar</systemPath>
7 </dependency>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

Linux系统zip压缩命令详细参数,附文件排除选项的正确用法

这次给博客添加了纯代码缓存之后,发现缓存文件竟然达到了 50 多 MB!而我的服务器每次还需要同步至七牛,文件体积的增加都会增加文件远程同步备份的时间。因此,我...

2625
来自专栏跟着阿笨一起玩NET

WCF集成COM+应用程序遇到的问题

本文转载:http://www.cnblogs.com/Charles2008/archive/2010/06/24/1764510.html

131
来自专栏无所事事者爱嘲笑

vue-cli webpack2项目打包优化

1704
来自专栏喵了个咪的博客空间

[喵咪PHP]页面显示空白问题

#[喵咪PHP]页面显示空白问题# ? ##前言## 哈喽!大家好啊,喵咪PHP第一次和大家见面了,熟悉的朋友呢也之道喵咪我也开了喵咪Liunx和喵咪Golan...

28911
来自专栏java系列博客

maven中的本地仓库与远程仓库

1662
来自专栏嵌入式程序猿

看官网一步步给你分析学习freeRTOS

在之前的公众号文章《freeRTOS源码目录结构分析》中我们简单介绍了源码目录结构,文件夹包含的内容,今天我们来分析下以NXP的kinetis K60塔式系统为...

3489
来自专栏Urahara Blog

域渗透-信息收集基础

2125
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Lynis执行安全审计

Lynis是一个基于主机的开源安全审计应用程序,可以评估Linux和其他类型UNIX操作系统的安全配置文件和状态。

1044
来自专栏北京马哥教育

10 个迅速提升你 Git 水平的提示

在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用Git提供的功能。 注:本文中,一些命令包含了方括号中的部分内容(例如:git add -p [fi...

2624
来自专栏龙渊阁测试精英

Jmeter(十五)_上传与下载

首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看。注意,此处我的文件路径是相对路径,对应的是我的...

552

扫描关注云+社区