关于Maven仓库的理解和引入外部jar包的几种方式

Maven仓库理解

在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>




猜你喜欢

转载自blog.csdn.net/pp_fzp/article/details/77833939