Java 无法访问子模块-Maven中的父项目库(jar)
我有一个项目叫家长。其类型为POM。有一个库(Java 无法访问子模块-Maven中的父项目库(jar),java,eclipse,maven,maven-3,build-automation,Java,Eclipse,Maven,Maven 3,Build Automation,我有一个项目叫家长。其类型为POM。有一个库(ojdbc6.jar)在公共存储库中不可用,因此我通过访问它,如您在下面的pom.xml中所看到的: <project> <modelVersion>4.0.0</modelVersion> <groupId>com.Parent</groupId> <artifactId>Parent</artifactId> <versio
ojdbc6.jar
)在公共存储库中不可用,因此我通过
访问它,如您在下面的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>
当我使用Maven构建时,会出现以下错误:
Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\6\ojdbc-6.jar'
testApp Build path Problem.
为什么它会出现在本地存储库中?只有当父项目包含包含系统路径的库(jar
)时,才会发生这种情况。当在同一个项目中访问系统路径库(jar
)时不会发生这种情况,就像父级引用了ojdbc6.jar
,在那里就可以了 来自:
最后,像任何其他依赖项一样声明它(但不包括系统范围):
您的.group.id
第三方
X.Y.Z
我通过更新父pom.xml中的systemPath解决了这个问题,如下所示:
<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath>
${main.basedir}/lib/ojdbc6.jar
然后在父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>
${project.basedir}
项目中
项目内回购
文件://${main.basedir}/lib
然后在子模块中添加以下properties and repositories(属性和存储库)元素(子模块文件夹位于父文件夹中,因此会添加“/..”,因此会向上移动一个目录,然后应按预期生成父lib文件夹的rest绝对路径):
${project.basedir}/。。
项目中
项目内回购
文件://${main.basedir}/lib
罐子相对于孩子们的位置在哪里?basedir属性在父项和子项中的值不同。Jar位于相对于父项项目的lib文件夹中,maven将依赖项Jar传递到其模块。我假设maven在将依赖项Jar包含到子模块时相对于绝对路径进行转换。您提到的答案有一个缺点,我想知道人们为什么欣赏它它。当您将项目提交到任何一个存储库时,例如SVN存储库,以便其他开发人员可以获取和访问项目等。他们需要运行命令SVN install bla bla..(以便在本地repo中提交),如果有许多非全局repo jar,则这是一项耗时的任务。这不适用于多模块构建,OP的问题已经暗示了对这个策略的一些理解,帮助我解决这个问题,但是它的答案并没有解决我的问题,所以我做了一些研发,并提出了上面提到的解决方案。谢谢你提供了解决问题的简单方法+1.
<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath>
<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>
<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>