Maven仓库理解
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径,
解读Maven在仓库中的存储路径:
1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 "." 转换成 "/" ; example: org.testng --->org/testng
2.基于artifactId准备路径,将artifactId连接到后面:org/testng/testng
3.使用version准备路径,将version连接到后面:org/testng/testng/5.8
4.将artifactId于version以分隔符连字号连接到后面:org/testng/testng/5.8/tesng-5.8
5.判断如果构件有classifier,就要在 第4项 后增加 分隔符连字号 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5
6.检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的org/testng/testng/5.8/tesng-5.8-jdk5.jar
MAVEN依赖关系中Scope的作用
Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。
目前依赖项的作用域<scope>可以使用5个值,在定义项目的依赖项的时候,我们可以通过scope来指定该依赖项的作用范围。scope的取值有compile、runtime、test、provided、system和import。
compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。
runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。
system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。
POM文件的内置属性(Maven预定义可以直接使用)
${basedir} 项目根目录
${version}表示项目版本;
${project.basedir}同${basedir};
${project.version}表示项目版本,与${version}相同;
${project.build.directory} 构建目录,缺省为target
${project.build.sourceEncoding}表示主源码的编码格式;
${project.build.sourceDirectory}表示主源码路径;
${project.build.finalName}表示输出文件名称;
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
maven 引入外部jar包的几种方式
1.dependency 本地jar包
<dependency> <groupId>com.hope.cloud</groupId> <!--自定义--> <artifactId>cloud</artifactId> <!--自定义--> <version>1.0</version> <!--自定义--> <scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <systemPath>${basedir}/lib/cloud.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency>2.将外部jar打入本地maven仓库
cmd 命令行,执行以下命令
mvn install:install-file -DgroupId=com.oracle "-DartifactId=ojdbc6" "-Dversion=11.2.0.4" "-Dpackaging=jar" "-Dfile=jar路径\ojdbc6.jar"
命令分析:
mvn:Maven cmd命令。
install:install-file:仓库添加外部jar包固定命令。
-DgroupId=com.gdal:仓库中jar放置文件目录级,在maven引用该jar包的groupId节点值。"-DartifactId=gdal":仓库中jar放置文件目录,在maven引用该jar包的artifactId节点值。
"-Dversion=1.0":仓库中jar文件版本,会生成文件夹名为1.0。
"-Dpackaging=jar":打包方式,此处为jar方式。
"-Dfile=W:\Resource\开发API\GDAL_Java\bin\gdal\java\gdal.jar":此处“=”号后面应为此次所要添加jar包的本地磁盘位置。
引用示例:
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version> </dependency>3.编译阶段指定外部lib
<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <compilerArguments> <extdirs>lib</extdirs><!--指定外部lib--> </compilerArguments> </configuration> </plugin>