Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问子模块-Maven中的父项目库(jar)_Java_Eclipse_Maven_Maven 3_Build Automation - Fatal编程技术网

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

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

我有一个项目叫家长。其类型为POM。有一个库(
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>