猿问

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

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

有任何想法吗?

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


青春有我
浏览 183回答 3
3回答

狐的传说

来自Maven 文档:system:此范围类似于提供的范围,只是您必须显式提供包含它的 JAR。工件始终可用,不会在存储库中查找。provided:这很像编译,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java Enterprise Edition 构建 Web 应用程序时,您可以将对 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web 容器提供了这些类。此范围仅在编译和测试类路径上可用,不可传递。似乎系统范围需要容器或 JDK 提供依赖作为提供的范围。因此,依赖项不会打包到 WAR 文件中。maven-war-plugin您可以像这样将依赖项打包到 lib 文件夹中:<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>

HUH函数

作为 Maven 构建的一部分,编译范围内的依赖项会自动添加到目标的 WEB-INF/lib 中。系统范围内的依赖关系不是,必须通过定义明确提供具有系统范围的依赖关系。

RISEBY

WAR 是 Tomcat、Glassfish、JBoss (...) 等 Servlet 容器的 Web 存档。它们由 Servlet 规范指定。规范指出数据源(数据库)在 Servlet-Containers 的领域。(...) 类型 javax.sql.DataSource,在组件可供应用程序使用之前,容器会为其注入对数据源的引用。您应该将数据库驱动程序放置到 servlet 容器中,而不是 Web 应用程序中。
随时随地看视频慕课网APP

相关分类

Java
我要回答