一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断

时间:2024-05-21 20:48:07

概述:

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

一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断


一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断

现在我们手动把本地的alipay-sdk-java20180309170622.jar上传到私服,并设置好maven坐标, 假设具体坐标是

一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断

然后我们修改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包了

一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断

一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断


结束