Maven之——坐标和依赖(上)
来源:互联网 发布:php程序员进阶书籍 编辑:程序博客网 时间:2024/06/13 05:01
Maven之——坐标和依赖(上)
1、 Maven坐标概念
Maven通过构件的坐标来在Maven仓库中定位到具体的构件、Maven的坐标元素包括groupId、artifactId、versiion、packaging、classifier。Maven内置了一个中央仓库地址、需要时Maven会根据坐标到其中下载。具体关于中央仓库的介绍在后面。
2、 Maven坐标详解
比如下面一组坐标:
<groupId>org.andy.items</groupId> <artifactId>scattered-items</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version>
groupId:定义当前Maven项目隶属的实际项目。
artifactId:定义实际项目中的一个Maven项目(模块)
version:定义Maven项目当前所出的版本。
packaging:定义Maven项目的打包方式、打包方式通常与生成构件的文件扩展名对应、例如上面最终生产的文件名为:scattered-items-1.0-SNAPSHOT.jar。而使用war打包方式的Maven项目最终生成的构件会有一个.war文件、其次打包方式会影响到构建的生命周期、当不定义packaging的时候、Maven会使用默认值jar。
classifier:用来帮助定义构建输出的一些附属构件、不能直接定义项目的classifier、因为附属构件不是项目直接默认生成的、而是由附加的插件帮助生成。
上述5个元素中、groupId、artifactId、version、是必须的、packaging是可选的、classifier是不能直接定义的。
3、 依赖配置
一个依赖可以包含的元素(项目中的pom.xml文件):
<dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <scope></scope> <type></type> <optional></optional> <exclusions> <exclusion> <groupId></groupId> <artifactId></artifactId> </exclusion> </exclusions> </dependency> </dependencies>
跟元素project下的dependencies可以包含一个或者多个dependency元素、以声明一个或者多个项目依赖、每个依赖可以包含的元素有:
groupId、artifactId、verion:必须元素、基本坐标。
type:依赖的类型、对应与项目坐标的packaging、大部分情况下该元素不必配置、其默认值是jar。
scope:依赖的范围、
optional:标记依赖是否可选、
exclusions:用来排除传递性依赖。
这些都会在后面有详细说明。
4、 依赖范围
Maven在编译、测试、运行项目时会使用不同的classpath、依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系的、
compile:编译依赖范围。如果没有指定就会默认使用该依赖范围。使用此编译范围的Maven依赖、对于编译、测试、运行三种classpath都有效。
test:测试依赖范围、只对测试classpath有效。比如Junit、只有在编译和测试的时候才需要。
provided:已提供依赖范围、对于编译和测试有效、但是在运行时无效、如servlet.api。编译和测试项目的时候需要、但是在运行的时候、servlet容器已经提供、就不需要Maven重复提供。
runtime:运行时依赖、对于测试和运行classpath有效、但是在编译主代码是无效、如JDBC驱动的实现、项目主代码的编译只需要JDK提供的JDBC接口、只有在执行测试或者运行项目的时候才需要上述接口的具体JDBC驱动。
system:系统依赖范围。其与provided依赖范围完全一致。但使用时必须通过systemPath元素显示第指定依赖文件的路径、谨慎使用。
import:导入依赖范围、不会对三种classpath产生实际的影响、他是与dependencyManagement结合使用的。
例如下面一段配置:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.2.RELEASE</version> <scope>runtime</scope> </dependency>
那么你在主代码目录下想使用Springframework的jar包中的任何类都是找不到的、编译器提示错误。
public class FooServiceImpl implements FoodService { private ApplicationContext context; private String str; @Override会提示找不到ApplicationContext类。这依赖范围<scope>xxx</scope>在使用的时候一定要注意!
依赖范围
编译classpath
测试classpath
运行classpath
示例
compile
Y
Y
Y
spring-core
test
Y
Y
junit
provided
Y
Y
servlet-api
runtime
Y
Y
JDBC驱动
system
Y
Y
本地的、Maven仓库之外的类库文件
- Maven之——坐标和依赖(上)
- Maven之——坐标和依赖(中)
- Maven之——坐标和依赖(下)
- 第四节:Maven坐标和依赖(上)
- Maven学习笔记(三)——坐标和依赖
- Maven实战——Maven的坐标和依赖
- Maven实战读书笔记之五(坐标和依赖)
- Maven学习笔记之坐标和依赖
- Maven学习之坐标和依赖
- maven 坐标和依赖
- maven坐标和依赖
- 【Maven】坐标和依赖
- Maven坐标和依赖
- Maven-坐标和依赖
- Maven 坐标和依赖
- Maven坐标和依赖
- Maven坐标和依赖
- maven3实战之坐标和依赖(何为maven坐标)
- linux(debian) git(分布式版本控制系统) 的使用
- Hibernate中的inverse和cascade属性
- 利用opencv改变视频长宽
- CUDA第一次编程
- 好像是出现过这样的问题吧?
- Maven之——坐标和依赖(上)
- mplayer 在从模式下命令行调节音量
- Android编译中m、mm、mmm 详解
- iOS平台UDID方案比较
- jdbc快速连接mysql
- pod升级步骤
- C++用非递归实现二叉树的前序排列,中序排列,后续排列
- POJ 3204 Ikki's Story I - Road Reconstruction(最大流)
- UVA - 141 The Spot Game