Maven系统作用域导致忽略其他依赖项

nle07wnf  于 12个月前  发布在  Maven
关注(0)|答案(1)|浏览(202)

我修改了我的pom.xml文件,将一个系统作用域依赖项添加到一个公共库中,我在多个项目中使用该公共库作为依赖项。在添加系统作用域依赖项之前,我能够编译和安装公共库,并且它的所有依赖项都可以在包括公共库作为依赖项的项目中使用。在添加系统作用域依赖项之后,公共库的其他依赖项在子项目中都不可用。
公共库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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.conceptualsystems</groupId>
    <artifactId>common</artifactId>
    <version>3.3</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0-b01</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<!--        <dependency>-->
<!--            <groupId>org.junit.jupiter</groupId>-->
<!--            <artifactId>junit-jupiter</artifactId>-->
<!--            <version>5.9.3</version>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.ini4j</groupId>
            <artifactId>ini4j</artifactId>
            <version>0.5.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.19</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0-b01</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>gnu.io</groupId>
            <artifactId>rxtx</artifactId>
            <version>2.2pre2</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/RXTXcomm.jar</systemPath>
    </dependencies>
</project>

字符串
依赖于这个库的项目应该有它所有的依赖项。如果我在最后删除gnu.io.rxtx依赖项,其他的依赖项在子项目中是可用的。为什么仅仅通过从本地目录中包含一个.jar依赖项,行为就会发生如此大的变化?
期望的行为:保留原始行为,并包括新的依赖项,以及在依赖项目中可用的其他依赖项。

mlnl4t2r

mlnl4t2r1#

对于普通依赖项,maven可以访问

  • 指向任何子依赖项的pom
  • 包含二进制类文件的jar文件

还有其他文物,如

  • Javadocs
  • 来源
  • 校验和

例如:查看可用于spring-core依赖项here的工件
当你有一个来自<systemPath>的依赖时,maven不能访问pom或任何其他工件。它只有一个对jar的引用,所以不能导入任何子依赖。

相关问题