1

cargo maven2 プラグインでいくつかの機能テストを実行しようとしています。これらのテストは、cargo maven2 プラグインを使用せずに起動すると、ローカルの tomcat サーバーで正常に実行されます。プラグイン自体は正常に起動しますが、テストを実行すると、次のトレースで 500 エラー コードが返されます。

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

 ... 109 more
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
 at java.lang.ClassLoader.findClass(ClassLoader.java:531)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at persistence.spi.hibernate.TransformingClassLoader.loadClass(TransformingClassLoader.java:46)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:14  

pom に jarを追加ojdbc 6し、ojdbc 5 と ojdbc 14 への参照を除外しました。

これが私の貨物構成です:

       <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.4.14</version>
        <configuration>
           <container>
              <containerId>tomcat7x</containerId>
              <type>installed</type>
              <zipUrlInstaller>
                 <url>http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.zip</url>
                 <downloadDir>${project.build.directory}/downloads</downloadDir>
                 <extractDir>${project.build.directory}/extracts</extractDir>
              </zipUrlInstaller>
              <systemProperties>
                 <java.io.tmpdir>target/tmp</java.io.tmpdir>
              </systemProperties>
              <output>${project.build.directory}/cargo-container.log</output>
              <log>${project.build.directory}/cargo.log</log>
           </container>
           <deployables>
              <deployable>
                 <groupId>x.rest</groupId>
                 <artifactId>x-war</artifactId>
                 <type>war</type>
              </deployable>
           </deployables>
           <configuration>
              <type>standalone</type>
              <home>${project.build.directory}/tomcat7x/container</home>
              <properties>
                 <cargo.tomcat.ajp.port>9414</cargo.tomcat.ajp.port>
                                  <cargo.servlet.port>9484</cargo.servlet.port>
                 <cargo.rmi.port>9496</cargo.rmi.port>
                 <cargo.logging>high</cargo.logging>
                 <war>${project.build.directory}/x-war.war</war>
                 <!-- This section was added by me but didn't fix the problem -->
                 <cargo.datasource.datasource>
                    cargo.datasource.jndi=jdbc/DB|
                    cargo.datasource.type=javax.sql.DataSource|
                    cargo.datasource.driver=oracle.jdbc.OracleDriver|
                    cargo.datasource.url=jdbc:oracle:thin:abc/abc@domain.net:22:node1|
                    cargo.datasource.username=abc|
                    cargo.datasource.password=abc
                </cargo.datasource.datasource>
              </properties>
              <configfiles>
                 <configfile>
                    <file>${project.basedir}/src/test/resources/war-dependencies/stable-dev/context.xml</file>
                    <todir>conf</todir>
                    <tofile>context.xml</tofile>
                 </configfile>
              </configfiles>
              <files>
                 <file>
                    <file>${project.basedir}/src/test/resources/war-dependencies/stable-dev/service.keystore</file>
                    <todir>shared/classes</todir>
                 </file>
              </files>
           </configuration>
        </configuration>
        <executions>
           <!-- The executions here deal only with INTEGRATION-TEST phase. We are NOT hitting REST Service via tests in the TEST phase. We need to be assured that our container is already 
              up and running. So cargo is started in PRE-INTEGRATION-TEST phase. -->
           <execution>
              <id>start-container</id>
              <phase>pre-integration-test</phase>
              <goals>
                 <goal>stop</goal>
              </goals>
           </execution>
         <!--    <execution>
              <id>stop-container</id>
              <phase>post-integration-test</phase>
              <goals>
                 <goal>stop</goal>
              </goals>
           </execution>-->
        </executions>
     </plugin>   

私はWebサービスの世界の初心者なので、提案/ポインタをいただければ幸いです。どこかで設定が不足している可能性がありますか?

4

2 に答える 2

0

Tomcat で例外が発生しなかった理由は、Tomcat の lib フォルダーにある既存の ojdbc6.jar ファイルが原因である可能性があります。

ただし、法的な問題により、oracle jdbc ドライバーの jar ファイルがパブリック Maven リポジトリーで見つかりません。

これは、maven リポジトリから Oracle jdbc ドライバーを取得するための公式の手順です。

Oracle Maven Repository - NetBeans、Eclipse & Intellij から Oracle JDBC ドライバーを取得します。

別の単純で簡単な解決策があります。

jar ファイルをローカル ドライブにコピーしてローカル リポジトリに直接インストールし、コマンド プロンプトを開き、jar ファイルの現在のディレクトリに移動して、次のコマンドを実行します。

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dpackaging=jar -Dversion=11.2.0.4.0 -Dfile=ojdbc6.jar -DgeneratePom=true
于 2016-08-29T15:08:56.583 に答える