在使用Maven命令打包时报错:
[INFO] -------------------------------------------------------------
[ERROR] \workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[18,8] 软件包 oracle.jdbc 不存在
[ERROR] \workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[113,46] 找不到符号
符号: 变量 OracleTypes
cs.registerOutParameter(4, OracleTypes.CURSOR);
[ERROR] \workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[243,42] 找不到符号
符号: 变量 OracleTypes
cs.registerOutParameter(6, OracleTypes.CURSOR);//游标类型
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
\workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[18,18] 软件包 oracle.jdbc 不存在
\workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[113,46] 找不到符号
符号: 变量 OracleTypes
cs.registerOutParameter(4, OracleTypes.CURSOR);
\workspace\wlxm-ycps\src\main\java\com\petrochina\ycps\service\operation\impl\AssessOptionManagerImpl.java:[243,42] 找不到符号
符号: 变量 OracleTypes
cs.registerOutParameter(6, OracleTypes.CURSOR);//游标类型
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10 seconds
[INFO] Finished at: Mon Oct 22 15:25:59 CST 2012
[INFO] Final Memory: 41M/158M
[INFO] ------------------------------------------------------------------------
这里提示找不到“oracle.jdbc”,而这个包是在ojdbc6-11.2.0.1.0.jar中,WEB-INF/lib目录下也包含该jar。在网上搜索没有有用的信息,忽然想起来pom.xml中有关于ojdbc jar包的设置,打开之后发现问题:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
<scope>runtime</scope>
</dependency>
问题就是这里将ojdbc的依赖范围设置成了“runtime”,即运行时有效,在编译时没有加载该jar包所以报错。关于scope参数的解释如下:
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
解决方法:将scope的参数值由“runtime”改成“compile”,或者将该元素删除即可。