无法访问子模块中的父项目库(jar)-Maven
Unable to access parent project library(jar) in child module - Maven
我有一个名为 Parent 的项目。它的类型是 POM。有一个库 (ojdbc6.jar
) 在 public 存储库中不可用,所以我通过 <SystemPath>
访问它,如下所示 pom.xml
:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.Parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>childModule</module>
</modules>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc</artifactId>
<version>6</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ojdbc6.jar</systemPath>
</dependency>
</dependencies>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${basedir}/lib</url>
</repository>
</repositories>
现在子项目名称是 Child-Module1 和 Child-Module2 使用这个 (ojdbc6.jar
) 库 它是 POM如下所述:
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>testApp</artifactId>
<version>1.14.5.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>APP1</name>
<description>Application</description>
<parent>
<groupId>com.Parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>
当我使用 Maven 构建时出现错误:
Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\ojdbc-6.jar'
testApp Build path Problem.
为什么它会在本地存储库中查找?仅当父项目包含包含系统路径的库 (jar
) 时才会发生。在同一项目中访问系统路径库(jar
)时不会发生这种情况,例如父引用ojdbc6.jar
,在那里没问题。
发件人:
Finally, declare it like any other dependency (but without the system scope):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
我通过更新父 pom.xml 中的 systemPath 解决了这个问题,如下所示:
<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath>
然后在父 pom.xml 和存储库
中添加 main.basedir 属性
<properties>
<main.basedir>${project.basedir}</main.basedir>
</properties>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${main.basedir}/lib</url>
</repository>
</repositories>
然后在子模块中添加以下属性和存储库元素(添加“/..”是因为子模块文件夹驻留在父文件夹中,因此向上一个目录然后其余父 lib 文件夹的绝对路径应生成为预期):
<properties>
<main.basedir>${project.basedir}/..</main.basedir>
</properties>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${main.basedir}/lib</url>
</repository>
</repositories>
我有一个名为 Parent 的项目。它的类型是 POM。有一个库 (ojdbc6.jar
) 在 public 存储库中不可用,所以我通过 <SystemPath>
访问它,如下所示 pom.xml
:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.Parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>childModule</module>
</modules>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc</artifactId>
<version>6</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ojdbc6.jar</systemPath>
</dependency>
</dependencies>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${basedir}/lib</url>
</repository>
</repositories>
现在子项目名称是 Child-Module1 和 Child-Module2 使用这个 (ojdbc6.jar
) 库 它是 POM如下所述:
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>testApp</artifactId>
<version>1.14.5.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>APP1</name>
<description>Application</description>
<parent>
<groupId>com.Parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>
当我使用 Maven 构建时出现错误:
Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\ojdbc-6.jar'
testApp Build path Problem.
为什么它会在本地存储库中查找?仅当父项目包含包含系统路径的库 (jar
) 时才会发生。在同一项目中访问系统路径库(jar
)时不会发生这种情况,例如父引用ojdbc6.jar
,在那里没问题。
发件人:
Finally, declare it like any other dependency (but without the system scope):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
我通过更新父 pom.xml 中的 systemPath 解决了这个问题,如下所示:
<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath>
然后在父 pom.xml 和存储库
中添加 main.basedir 属性<properties>
<main.basedir>${project.basedir}</main.basedir>
</properties>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${main.basedir}/lib</url>
</repository>
</repositories>
然后在子模块中添加以下属性和存储库元素(添加“/..”是因为子模块文件夹驻留在父文件夹中,因此向上一个目录然后其余父 lib 文件夹的绝对路径应生成为预期):
<properties>
<main.basedir>${project.basedir}/..</main.basedir>
</properties>
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${main.basedir}/lib</url>
</repository>
</repositories>