1. 程式人生 > >Maven打包提示“軟體包 oracle.jdbc 不存在”

Maven打包提示“軟體包 oracle.jdbc 不存在”

  在使用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”,或者將該元素刪除即可。