概述:
maven 的<dependency>的scope属性可以为system,因为有些你依赖的jar包可能是没有maven坐标的,它完全不在maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用
不过不推荐使用system,因为一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断,即所有其他依赖本项目的项目都无法传递依赖了。
比如:假设A项目依赖了m.jar, n.jar, x.jar, 然后我们把A项目打包成了a.jar, 如果此时B项目依赖了A项目,则B项目通常自然就已经默认传递依赖了m.jar, n.jar, x.jar。
但是如果A项目的pom.xml文件出现了scope为system的depend,则B项目就只能依赖a.jar, 将无法传递依赖m.jar, n.jar, x.jar
具体举例如下
有一个叫做IJPay的项目, 如果pom.xml中含有了scope为system的depend, 假设pom.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId>
<version>1.1.3</version>
<packaging>jar</packaging>
<name>IJPay</name>
<description>Easy PayLibrary</description>
<url>https://github.com/Javen205/IJPay</url>
。。。。。。。。。
。。。。。。。。。
<dependencies>
<!-- 开源多维码生成工具 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
。。。。。。。。。
。。。。。。。。。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>java20171012102412</version>
<scope>system</scope>
<!-- J:\mljCode\IJPay\libs 目录下有lipay-sdk-java20180309170622.jar文件 -->
<systemPath>${project.basedir}/libs/alipay-sdk-java20180309170622.jar</systemPath>
</dependency>
</dependencies>
。。。。。。
。。。。。。
</project>
有一个maven_project_002的项目maven引用了该项目,pom文件有如下内容
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId>
<version>1.1.3</version>
</dependency>
我们发现, maven_project_002 无法传递依赖IJPay所依赖的jar包,maven_project_002只能依赖IJPay.jar
现在我们手动把本地的alipay-sdk-java20180309170622.jar上传到私服,并设置好maven坐标, 假设具体坐标是:
然后我们修改IJPay.xml文件的内容如下
<?xml version="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId>
<version>1.1.3</version>
<packaging>jar</packaging>
<name>IJPay</name>
<description>EasyPay Library</description>
<url>https://github.com/Javen205/IJPay</url>
。。。。。。。。。
。。。。。。。。。
<dependencies>
<!--开源多维码生成工具 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
。。。。。。。。。
。。。。。。。。。
<!--不要使用scode system, 这会导致本项目打包成的jar包,其他依赖本项目的项目无法传递依赖了
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>java20171012102412</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/alipay-sdk-java20180309170622.jar</systemPath>
</dependency>
-->
<!-- 可以考虑把${project.basedir}/libs/alipay-sdk-java20180309170622.jar 上传到本地私服,手动设置好maven坐标,然后在引用它 -->
<dependency>
<groupId>haobin_custom_alipay</groupId>
<artifactId>haobin_custom_alipay-sdk</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
。。。。。。
。。。。。。
</project>
重新打包部署IJPay到私服 mvn clean compile deploy,这时候我们发现maven_project_002可以传递依赖IJPay项目所依赖的jar包了
结束