3 回答
TA贡献1804条经验 获得超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>
TA贡献1836条经验 获得超4个赞
作为 Maven 构建的一部分,编译范围内的依赖项会自动添加到目标的 WEB-INF/lib 中。系统范围内的依赖关系不是,必须通过定义明确提供具有系统范围的依赖关系。
TA贡献1856条经验 获得超5个赞
WAR 是 Tomcat、Glassfish、JBoss (...) 等 Servlet 容器的 Web 存档。它们由 Servlet 规范指定。规范指出数据源(数据库)在 Servlet-Containers 的领域。
(...) 类型 javax.sql.DataSource,在组件可供应用程序使用之前,容器会为其注入对数据源的引用。
您应该将数据库驱动程序放置到 servlet 容器中,而不是 Web 应用程序中。
添加回答
举报