我的项目是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文件夹,仍然可以在代码中访问此类而不会出现编译错误?
答案 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或服务器库中查找资源