无法访问子模块中的父项目库(jar) - Maven

时间:2015-10-22 14:36:17

标签: java eclipse maven maven-3 build-automation

我有一个名为 Parent 的项目。它的类型是POM。有一个库(ojdbc6.jar)在公共存储库中不可用,因此我通过<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\6\ojdbc-6.jar'
testApp Build path Problem.

为什么它在本地存储库中查找?仅当父项目包含包含系统路径的库(jar)时才会发生。当访问系统路径库(jar)在同一个项目中时,例如父级引用ojdbc6.jar,就不会发生这种情况。

2 个答案:

答案 0 :(得分:4)

我通过更新父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文件夹的rest绝对路径) :

  <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>

答案 1 :(得分:0)

来自:https://stackoverflow.com/a/2230464/1490322

  

最后,将其声明为任何其他依赖项(但没有系统范围):

<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>3rdparty</artifactId>
  <version>X.Y.Z</version>
</dependency>