我修改了我的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依赖项,行为就会发生如此大的变化?
期望的行为:保留原始行为,并包括新的依赖项,以及在依赖项目中可用的其他依赖项。
1条答案
按热度按时间mlnl4t2r1#
对于普通依赖项,maven可以访问
还有其他文物,如
例如:查看可用于
spring-core
依赖项here的工件当你有一个来自
<systemPath>
的依赖时,maven不能访问pom或任何其他工件。它只有一个对jar的引用,所以不能导入任何子依赖。