2017-05-22 12 views
0

実行時に複数のデータベースを接続するためにMaven依存関係を使用して実行可能なJarを作成しました。 Mavenを使用してビルドされた実行可能なJarファイルは、実行時に複数のデータベースドライバの依存関係を解決していません

は、私は以下のように依存関係を追加しました:

<dependency> 
     <groupId>com.oracle.jdbc</groupId> 
     <artifactId>ojdbc7</artifactId> 
     <version>12.1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.microsoft.sqlserver</groupId> 
     <artifactId>mssql-jdbc</artifactId> 
     <version>6.1.7.jre8-preview</version> 
    </dependency> 

を私の場合、私は実行可能なjarファイルを実行したときには、もし適切なドライバがSQL Serverデータベースの見つからないいないOracleデータベースに正常に接続されているができます。

上記の依存関係の順序をSQLサーバーとOracleに変更して実行可能な新しいjarを作成して実行したところ、SQLサーバーデータベースに正常に接続できましたが、エラーが発生しました適切なドライバはありませんOracleデータベース用が見つかりました。

抽出された実行可能な両方のjarファイルを比較すると、構造、ファイル数、ファイルサイズはまったく同じで、違いはありませんでした。したがって、実行可能なjarを構築する際に問題となるものを見つけることができず、単一のjarが両方のデータベースで機能するようになりました。

任意の提案は本当に事前に

おかげで...この奇妙な現象を解決するために私を助けることになります。

.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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.mycompany.dataload</groupId> 
<artifactId>DataLoadUtilities</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<name>DataLoadUtilities</name> 
<description>A utility project that started with fetching table metadata from SQL Server and Oracle</description> 
<properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
</properties> 


<dependencies> 
    <dependency> 
     <groupId>com.oracle.jdbc</groupId> 
     <artifactId>ojdbc7</artifactId> 
     <version>12.1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.microsoft.sqlserver</groupId> 
     <artifactId>mssql-jdbc</artifactId> 
     <version>6.1.7.jre8-preview</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency>    
</dependencies> 


<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
       <mainClass>com.mycompany.dataload.main.TableMetadataGeneratorForHive</mainClass> 
      </transformer> 
      </transformers> 
      <filters> 
     <filter> 
      <artifact>*:*</artifact> 
      <excludes> 
      <exclude>META-INF/*.SF</exclude> 
      <exclude>META-INF/*.DSA</exclude> 
      <exclude>META-INF/*.RSA</exclude> 
      </excludes> 
     </filter> 
     </filters> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<version>2.6</version> 
<executions> 
    <execution> 
     <id>unpack-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>unpack-dependencies</goal> 
     </goals> 
     <configuration> 
      <excludeScope>system</excludeScope> 
      <excludes>META-INF/*.SF</excludes> 
      <excludes>META-INF/*.DSA</excludes> 
      <excludes>META-INF/*.RSA</excludes> 
      <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds> 
      <outputDirectory>${project.build.directory}/classes</outputDirectory> 
     </configuration> 
    </execution> 
</executions></plugin> 
</plugins>  
</build></project> 
+0

'hibernate.cfg.xml'ファイルにはどのような方言を指定しましたか? –

答えて

0

実行可能なjarの作成方法が原因でこの問題が発生しています。

ojdbc7-12.1.0.2.jarおよびmssql-jdbc-6.1.7.jre8-preview.jarには、それぞれのベンダーのjava.sql.Driver実装クラスの名前を含むMETA-INF/services/java.sql.Driverファイルが含まれています。あなたが依存リストで遭遇した最初のものだけを得るように思えます。

これは、java.sql.DriverManagerのjavadocで説明されています。

Java 8 JAR File Specification - Service ProviderMETA-INF/services/java.sql.Driverファイルと述べているより多くの情報提供:

が...したがって、おそらく設定することができますユニークな具象プロバイダクラス名

の改行区切りのリストが含まれている必要がありますが構成内のAppendingTransformerがシェーディング中にこれらのファイルの内容をマージします。