如何在tomcat lib文件夹的代码中使用ojdbc14 jar

时间:2015-02-18 05:37:11

标签: java maven tomcat jdbc

我的项目是maven。我决定将ojdbc14.jar带入我的项目,而不是将其保存在tomcat / lib文件夹中。所以我使用mvn install:install-file在我的本地存储库中安装了ojdbc14.jar。但正如我现在所理解的那样,最好将它移动到lib文件夹,因为jdbc驱动程序的内存韭菜已经在这里讨论tomcat - memeory-leak。 但问题是我正在使用从这个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文件夹,仍然可以在代码中访问此类而不会出现编译错误?

2 个答案:

答案 0 :(得分:0)

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

  

提供这很像编译,但表示您期望JDK   或者在运行时提供依赖性的容器。例如,何时   您可以为Java Enterprise Edition构建Web应用程序   设置对Servlet API和相关Java EE API的依赖   提供范围是因为Web容器提供了这些类。这个   scope仅在编译和测试类路径上可用,并且是   不是过渡性的。

请参阅示例用法here,请注意,对于您的情况,您还需要添加提供给此语法。 您需要按照here的说明将此jar安装到您的maven存储库。

答案 1 :(得分:0)

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

<强>提供: 这很像compile,但表示您希望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或服务器库中查找资源