2014-09-19 43 views
0

我试图构建一个Maven插件,它将连接&会话连接到Oracle XE DB。当执行自定义Maven插件时,所需的类缺少oracle/jdbc/OracleDriver

我的插件生成没有错误,但是当我尝试通过Maven执行它时,出现OracleDriver丢失的错误。

[INFO] --- script-import-maven-plugin:1.0-SNAPSHOT:import (default-cli) @ TOLTAT-SQL-Migration --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.156 s 
[INFO] Finished at: 2014-09-19T10:40:25+10:00 
[INFO] Final Memory: 4M/490M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal com.tollgroup.tollonline.deploy:script-import-maven-plugin:1.0-SNAPSHOT:import (default-cli) on project TOLTAT-SQL-Migration: Execution default-cli of goal com.tollgroup.tollonline.deploy:script-import-maven-plugin:1.0-SNAPSHOT:import failed: A required class was missing while executing com.tollgroup.tollonline.deploy:script-import-maven-plugin:1.0-SNAPSHOT:import: oracle/jdbc/OracleDriver 
[ERROR] ----------------------------------------------------- 
[ERROR] realm = plugin>com.tollgroup.tollonline.deploy:script-import-maven-plugin:1.0-SNAPSHOT 
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy 
[ERROR] urls[0] = file:/C:/Users/petertip/.m2/repository/com/tollgroup/tollonline/deploy/script-import-maven-plugin/1.0-SNAPSHOT/script-import-maven-plugin-1.0-SNAPSHOT.jar 
[ERROR] urls[1] = file:/C:/Users/petertip/.m2/repository/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar 
[ERROR] Number of foreign imports: 1 
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]] 
[ERROR] 
[ERROR] -----------------------------------------------------: oracle.jdbc.OracleDriver 

我的Maven知识是有限的,我的Java是相当生锈的。

我不确定是否需要在插件的POM中放置ojdbc6的依赖项。它建立&没有它安装愉快。添加它不能解决我的问题。

我的Java是目前很简单,只是想获得它进行会谈到Oracle:

package au.com.toll.toltat.script_import_maven_plugin; 

import java.sql.DriverManager; 
import java.sql.SQLException; 

import oracle.jdbc.OracleDriver; 

import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecutionException; 
import org.apache.maven.plugin.MojoFailureException; 

/** 
* Goal which imports Stored Procedure scripts 
* 
* @goal import 
* 
* @phase process-sources 
*/ 
public class ScriptImportMojo extends AbstractMojo 
{ 
    /** 
    * Location of the file. 
    * @parameter property="sql.update.directory" 
    * @required 
    */ 
    private String inputUpdateDirectory; 

    /** 
    * Location of the file. 
    * @parameter property="sql.rollback.directory" 
    * @required 
    */ 
    private String inputRollbackDirectory; 

    public void execute() 
      throws MojoExecutionException, MojoFailureException 
    { 
     try { 
      // register our JDBC driver 
      DriverManager.registerDriver (new OracleDriver()); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

该插件的POM是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.tollgroup.tollonline.deploy</groupId> 
    <artifactId>script-import-maven-plugin</artifactId> 
    <packaging>maven-plugin</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>script-import-maven-plugin Maven Mojo</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-plugin-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
<!-- <dependency> --> 
<!--  <groupId>com.oracle</groupId> --> 
<!--  <artifactId>ojdbc6</artifactId> --> 
<!--  <version>11.2.0.2.0</version> --> 
<!--  <scope>provided</scope> --> 
<!-- </dependency> --> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>com.tollgroup.tollonline.deploy</groupId> 
     <artifactId>script-import-maven-plugin</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

这就是扔的POM错误是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.tollgroup.tollonline</groupId> 
    <artifactId>TOLTAT-SQL-Migration</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>script-import-maven-plugin Maven Mojo</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
     <!-- dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0.2.0</version> 
      <scope>provided</scope> 
     </dependency --> 
    <dependency> 
     <groupId>com.tollgroup.tollonline.deploy</groupId> 
     <artifactId>script-import-maven-plugin</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    </dependencies> 
    <properties> 
    <sql.update.directory>update</sql.update.directory> 
    <sql.rollback.directory>rollback</sql.rollback.directory> 
    </properties> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>com.tollgroup.tollonline.deploy</groupId> 
     <artifactId>script-import-maven-plugin</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Maven确实建议http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException作为一种可能的解决方案。不幸的是,这仅仅表明我的JAR可能是腐败的。

由于ojdbc6.jar存储在我们的Artifactory存储库中,没有其他人遇到问题,我删除了它&重新下载它,没有任何改变,我不认为这是我的问题。 ojdbc6 jar存在于我的\.m2\repository\com\oracle\ojdbc6\11.2.0.2.0文件夹中

是否像OracleDriver不在ojdbc6.jar中那样简单(而且我的笨蛋)?

谢谢你可以提供的任何帮助,

Peter。

+1

一位同事做它为我工作,但是,只有更换'后DriverManager.registerDriver(新一个OracleDriver()); ''用'Class.forName(“oracle.jdbc.driver.OracleDriver”);' 我遇到的问题是,它完全飞行在面对doco http://docs.oracle.com/cd /E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html,它表示使用Class.forName不适用于所有情况。 – 2014-09-19 04:25:50

回答

2

添加依赖于插件的配置在当前失败的POM:

<build> 
    <plugins> 
    <plugin> 
     <groupId>com.tollgroup.tollonline.deploy</groupId> 
     <artifactId>script-import-maven-plugin</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <dependencies> 
      <dependency> 
       <groupId>com.oracle</groupId> 
       <artifactId>ojdbc6</artifactId> 
       <version>11.2.0.2.0</version> 
      </dependency> 
     </dependencies> 
    </plugin> 
    </plugins> 
</build> 
1

固定它...

我进口oracle.jdbc.OracleDriver;,当我一直在进口import oracle.jdbc.driver.OracleDriver;

两者都是有效的选项,但只有一个是正确的。 :-(

也不得不在ojdbc6的范围更改为runtime在插件POM

相关问题