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

相关文章

来自专栏编程微刊

如何在本地运行查看github上的开源项目

1156
来自专栏网站漏洞修补

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

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

1312
来自专栏FreeBuf

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

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

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

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

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

3113
来自专栏企鹅号快讯

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

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

2156
来自专栏BeJavaGod

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

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

3594
来自专栏数据和云

运维经验:回滚段异常的特殊救急方法

? 冷菠 冷菠,资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队管理以及培训经验。擅长数据库备份恢复、数据库性能诊断优化以及数据...

3839
来自专栏网站漏洞修补

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

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

1524
来自专栏java达人

KAFKA分布式消息系统

Kafka[1]是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点...

2916
来自专栏Pythonista

软件目录结构规范

892

扫码关注云+社区