坐标是定位用的。Maven的坐标是4维的,由以下四个部分组成:
1, groupId:定义当前maven隶属项目。Cn.ticast.maven ,包名
2, artifactId:定义实际项目中的一个模块。 最好定义成对外提供的那个类的名字
3, version:定义当前项目的当前版本。0.0.1-SNAPSHOT,当前版本,SNAPSHOT是快照。
4, packaging:定义该项目的打包方式。Web项目打出来的是war包。
这四个东西在pom.xml中见过,但是pom.xml中没有packaging标签,其实他有一个默认值,是jar。
定义成四维的意义:要找到这个类很方便。
Maven中需要找其他类的情况就是依赖关系,一个类依赖于另一个类,必须确定那个类的位置,而在pom.xml中定义依赖是用的就是这四维坐标。(要给类在仓库中起一个唯一的定位,这样别的类就很容易找到他)。
依赖的定义:如下:
<dependencies> //依赖的jar,工程 <dependency> <groupId>junit</groupId> //依赖junit <artifactId>junit</artifactId> <version>4.9</version> //junit版本 <scope>test</scope> //作用域,test为在测试阶段有效。 </dependency> <dependency> <groupId>cn.itcast.maven</groupId> //依赖类所在的包 <artifactId>Hello</artifactId> //java文件名 <version>0.0.1-SNAPSHOT</version> //版本 <scope>compile</scope> //作用域,编译时有效 </dependency> </dependencies>
Scope作用域详解:
作用域说明了这个依赖的jar在项目构建的过程中的哪些步骤有效。
Scope共有四个可选值:
Compile:如上例所示,这个类(HelloFriend)依赖于(调用了Hello的方法)Hello,依赖定义中定义这个Hello的作用域为compile,因为,这个HelloFriend在主代码main编译时需要Hello,同样测试的时候也用到了Hello中的方法,打包运行后也要用到Hello中的那个方法,所以在三个时期都有效,定义成compile。
Test:如上例所示,HelloFriend在测试的时候需要用到junit,所以HelloFriend依赖于junit,但是他仅仅在测试的时候需要用到junit,在其他的时候不需要用他,所以将junit的作用域定义为test,即只在测试阶段有效。
Provided:一个web项目在主程序中肯定会用到servlet-api的东西,所以在主代码有效,当然测试的时候也需要用到servlet-api的东西,但是运行时用的不一定是这个servlet-api,可能会用别的api,所以运行时为NO。
Runtime:即这个依赖只在运行是才会被用到,如JDBCDriver,它只带运行时做注册驱动,其他的时候都用不到,所以这个作用域只在运行时有效。