如何在tomcat-lib文件夹中的代码中使用ojdbc14jar



我的项目在maven中。我决定把ojdbc14.jar放进我的项目中,而不是放在tomcat/lib文件夹中。因此,我使用mvn install:install-file在本地存储库中安装了ojdbc14.jar。但正如我现在所理解的,最好将它移到lib文件夹中,因为jdbc驱动程序的内存泄漏已经在这里讨论过了。但问题是我使用了一些从这个ojdbc14.jar导入的类。例如:

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.driver.OracleConnection;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.BLOB;
import oracle.sql.CLOB;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

如何从项目中删除我的ojdbc14.jar并将其移到lib文件夹中,同时仍然能够在代码中访问此类而不会出现编译错误?

编译:这是默认范围,如果未指定,则使用此范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。

提供:这很像编译,但表示您希望JDK或容器在运行时提供依赖关系。例如,当为Java Enterprise Edition构建web应用程序时,您需要将对Servlet API和相关Java EE API的依赖设置为所提供的范围,因为web容器提供了这些类。此作用域仅在编译和测试类路径上可用,并且不可传递。

运行时:此范围表示编译不需要依赖项,而是执行依赖项。它在运行时和测试类路径中,但不在编译类路径中。

测试:此范围表示应用程序的正常使用不需要依赖项,仅适用于测试编译和执行阶段。

系统:这个作用域与提供的作用域类似,只是您必须提供显式包含它的JAR。工件总是可用的,并且不会在存储库中查找。

导入:(仅在Maven 2.0.9或更高版本中可用)此作用域仅用于节中pom类型的依赖项。它表示指定的POM应该替换为该POM部分中的依赖项。由于它们被替换,具有导入范围的依赖项实际上并没有参与限制依赖项的传递性。

根据您的要求,您添加了maven依赖项,如

<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc14</artifactId>
   <version>10.2.0.2.0</version>
   <scope>provided</provided>
</dependency>

因此运行时服务器将从JDK或服务器库

中查找资源

您想要的是提供maven范围。由于您已经将ojdbc14.jar放在tomcat lib文件夹中,它现在与tomcat提供的任何其他库(例如servlet)没有什么不同。

provided这很像compile,但表示您期望JDK或在运行时提供依赖性的容器。例如,当为Java Enterprise Edition构建一个web应用程序将对Servlet API和相关Java EE API的依赖关系设置为提供的作用域,因为web容器提供了这些类。这作用域仅在编译和测试类路径上可用,并且不可传递。

请参阅此处的示例用法,注意,对于您的情况,还需要向该语法添加provided。您需要将这个jar安装到您的maven存储库中,如下所述。

最新更新