首页 > 解决方案 > Maven:在war/WEB-INF/lib中找不到本地依赖文件

问题描述

我添加了我的本地依赖库(jar文件):

<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/ojdbc7-12.1.0.2.jar</systemPath>
</dependency>

一切正常,直到 maven 生成战争神器。

我查看了生成的war文件,但是里面没有jar依赖。

有任何想法吗?

我知道我可以使用maven installfile. 我需要使用这种依赖声明来关注问题。

标签: javamaven

解决方案


来自Maven 文档

system:此范围类似于提供的范围,只是您必须提供明确包含它的 JAR。工件始终可用,不会在存储库中查找。

provided:这很像 compile,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java 企业版构建 Web 应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web 容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递。

似乎系统范围需要容器或 JDK 来提供依赖作为提供的范围。因此,依赖项不会打包到 WAR 文件中。

您可以使用以下方式将依赖项打包到 lib 文件夹中maven-war-plugin

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        ...
        <webResources>
            <resource>
                <directory>libs</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                    <include>ojdbc7-12.1.0.2.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

推荐阅读