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 条评论
登录 后参与评论

相关文章

来自专栏腾讯NEXT学位

【干货】打造自己的web前端工作流(一)--- 交互的命令行工具模板篇

前言 web前端领域技术日新月异,技术栈也不断丰富,在日常工作中涉及到的内容也不断增加,一个前端项目从开发到发布涉及的步骤也很多,很多重复工作内容,因此我...

1274
来自专栏涤生的博客

服务框架之注册中心,你不知道的内幕

前一篇服务框架技术栈粗略分析了服务框架需要的各个核心模块,首先提到的就是注册中心,注册中心实现了服务注册和发现的功能,在服务框架中也发挥着重要的作用。今天主要围...

882
来自专栏网站漏洞修补

MetInfo漏洞如何修复以及网站安全防护

metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到...

1264
来自专栏企鹅号快讯

大型网站技术架构:Web 前端性能优化

浏览器访问渲染优化 减少 http 请求数 http 协议是无状态的应用层协议,每次 http 请求都会建立新的通信链路,并且在服务端,每个 http 连接都会...

1926
来自专栏数据和云

Linux Bug: free cache 导致数据库实例crash

李真旭(Roger) ACOUG 核心专家,Oracle ACE,云和恩墨技术专家 编辑手记:linux 文件系统的cache分为2种:page cache和 ...

2896
来自专栏程序员的碎碎念

git上传更新项目-错误总结

前些天做完项目一部分内容的时候,想git上传代码上去远程仓库里,却出现了不少git的错误提示信息。在这里总结一下吧: 一、正确的git上传更新项目步骤为:...

3043
来自专栏Java架构沉思录

Zookeeper总览

ZooKeeper是一款开源的 分布式应用 的 分布式协调服务 。它包含一个简单的 原语集 ,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zoo...

861
来自专栏企鹅号快讯

g4e基础篇#4 了解Git存储库

Git 存储库看上去就是一个文件夹,只是在这个文件夹中不仅仅保存了所有文件的当前版本,也同时保存了所有的历史记录,这些额外的信息都保存在当前文件夹下面的.git...

2056
来自专栏BeJavaGod

SSO单点登录的发展由来以及实现原理

单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1、web单系统应用 早期我们开发web应用都是所有的包放在一起打成一...

3424
来自专栏FreeBuf

Apache CVE-2017-7659漏洞重现及利用分析

近日,apache在其网站发布了最新的安全公告,其中涉及多个漏洞。针对CVE-2017-7659漏洞的介绍是这样的: A maliciously constru...

3576

扫码关注云+社区