首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven基础知识

maven基础知识

作者头像
Ryan-Miao
发布2018-03-13 11:58:29
6790
发布2018-03-13 11:58:29
举报
文章被收录于专栏:Ryan MiaoRyan Miao

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>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.maven基础知识                                                                                                                                             
    • 1.1maven坐标                                                                                                                                             
      • 1.2maven依赖                                                                                                                                        
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档