欠落しているアーティファクトcom.microsoft.sqlserver:sqljdbc4:jar:4.0


103

MS SQLドライバーの依存関係をPOM.xmlファイルに追加しようとしています。依存関係は次のとおりです。

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>

しかし、私はこの例外を受け取ります

欠落しているアーティファクトcom.microsoft.sqlserver:sqljdbc4:jar:4.0

私は本当に問題を理解していません。

回答:


160

更新

Microsoftは現在、この成果物をMaven Centralで提供しています。詳細については、@ nirmalの回答を参照してください:https ://stackoverflow.com/a/41149866/1570834


元の答え

問題は、Mavenがこのアーティファクトを構成済みのMavenリポジトリのいずれにも見つけられないことです

残念ながら、MicrosoftはこのアーティファクトをMavenリポジトリ経由で利用可能にしていません。jarをMicrosoftのWebサイトからダウンロードし、ローカルのmavenリポジトリに手動でインストールする必要があります。

これは、次のmavenコマンドで実行できます。

mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar

次に、POMでMavenを実行すると、アーティファクトが見つかります。


回答に感謝しますが、コマンドを実行するとこれが表示されます[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4 :install-file (default-cli) on project standalone-pom: The specified file 'C:\Us ers\anthony\sqljdbc4.jar' not exists -> [Help 1]
CodeNotFound

3
sqljdbc4.jarがコマンドを実行しているディレクトリにあることを確認してください。そうでない場合は、フルパスを明示的に指定してください。
セルゲイマカロフ

2
@Antonyは、Sergeyが言うように、sqljdbc4.jarをダウンロードしたのと同じ場所からmavenコマンド(私の回答で与えられたとおり)を実行するか、ファイルへの完全パスなどを提供する必要があります-Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar
DB5 2013年

@ DB5が言ったようにsqljdbc4.jarをインストールした後、プロジェクトでmvnパッケージを実行しても同じエラーが発生します。実際にはどこにインストールされますか?mvnからローカルにインストールされたjarのリストを表示できますか?
P-RAD、

5
下記の私の回答を参照しください、マイクロソフト(2016年11月現在)がこのjdbcドライバーをMaven Centralに追加しました
通常

73

マイクロソフトは最近、jdbcドライバーをオープンソース化しました

これで、Maven Centralでドライバーを見つけることができます。

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>

またはJava 7の場合:

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre7</version>
</dependency>

私はこの作業を何時間も試してみましたが、バージョン7.4.1ではドライバーがバージョン7.0.0でロードされないことがわかりました。なぜそうなのか知っていますか?
Archmede

27

同様の問題があり、次のようにして解決しました。

  • MicrosoftのWebサイトからローカルマシンにsqljdbc4.jarをダウンロードします。
  • 以下に示すように、「プロジェクト」->「インポート」->「Maven」->「アーティファクトをMavenリポジトリーにインストールまたはデプロイ」を右クリックします。

ここに画像の説明を入力してください

*次- >以下の詳細を記入

Artifact file: します(例:E:\ libに\あるsqljdbc4.jar私の場合)ダウンロードしたjarファイルのパスを
Group Id:com.microsoft.sqlserverの
Artifact Id:sqljdbc4
Version:4.0

ここに画像の説明を入力してください

  • 次に、プロジェクトを更新/クリーンアップします。

    ありがとうございました!

1
まだこの問題が発生しています
R.Anandan 2017年

1
驚くばかり!!!しかし、私はプロジェクトを通じてプロジェクトをリフレッシュしなければならなかった- >右クリック- > Mavenの- >アップデートプロジェクト...
サンジーブDhiman

11

上記の回答は、sqljdbc4.jarをローカルリポジトリに追加するだけです。その結果、配布用の最終的なプロジェクトjarを作成すると、ランタイムエラーに関する@Tonyのコメントに示されているように、sqljdbc4が再び失われます。

マイクロソフト(およびOracleおよびその他のサードパーティプロバイダー)は、ENU / EULAに従ってソフトウェアの配布を制限しています。したがって、これらのソフトウェアモジュールは、配布のためにMavenが作成したjarに追加されません。それを回避するためのハック(実行時にサードパーティのjarファイルの場所を提供するなど)はありますが、開発者はライセンス違反に注意する必要があります。

jdbcコネクタ/ドライバーのより良いアプローチは、ほとんどのDBMSと互換性があり、信頼性が高く、高速で(ベンチマークに従って)、GNUライセンスで配布されているjTDSを使用することです。これは、上記の他のテクニックのいずれかに従って四角いペグを丸い穴に打ち込むよりも、これを使用する方がはるかに簡単になります。


ああ男jtdsは私の日を救いました、gradleでsqljdbc4を構成することはa * sのいくつかの痛みです
norbertas.gaulia

唯一のことは、jTDSがMicrosoftのドライバーと同じ機能をサポートしていないことです。たとえば、バッチ更新。
lpacheco 2016年

1
jTDSがdatetime2データ型をサポートしていないのは残念です。私の選択は、自分のdatetime2-to-java-dateメソッドをロールするか、Microsoftドライバーを動作させるために多くのフープを通過することです。
jkerak

2017年の時点で、ドライバーはJDBC4に更新されておらず、ほとんど機能していないため、HikariCPやより最新のconnプールでは機能しません。
アルファブラボ2017

11

プロジェクトリポジトリを作成することもできます。同じプロジェクトでより多くの開発者が作業していて、ライブラリをプロジェクトに含める必要がある場合に便利です。

  • まず、プロジェクトのlibディレクトリにリポジトリ構造を作成し、次にライブラリをそこにコピーします。ライブラリは次の名前形式である必要があります。<artifactId>-<version>.jar

    <your_project_dir>/lib/com/microsoft/sqlserver/<artifactId>/<version>/

  • ライブラリファイルの横にpomファイルを作成し、次の情報をその中に入れます。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.2.0</modelVersion>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>4.2</version>
    </project>
  • この時点で、次のディレクトリ構造になっているはずです。

    <your_project_dir>/lib/com/microsoft/sqlserver/sqljdbc4/4.2/sqljdbc4-4.2.jar <your_project_dir>/lib/com/microsoft/sqlserver/sqljdbc4/4.2/sqljdbc4-4.2.pom

  • プロジェクトのpomファイルに移動して、新しいリポジトリを追加します。

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • 最後に、ライブラリへの依存関係を追加します。

    <dependencies>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.2</version>
        </dependency>
    </dependencies>

アップデート4.3.2017

ライブラリは公的に利用可能なリポジトリから取得できるようです。詳細については、nirmalの回答とJacek Grzelaczykの回答を参照してください。


これは受け入れられた答えであるはずです、私見。バイナリーをgitリポジトリーに入れたにもかかわらず、それは「火を忘れる」ソリューションです。ドライバーを各開発者のローカルリポジトリにデプロイする方法(またはStackOverflowでヘルプを検索する)に関する詳細な指示は必要ありません。
lpacheco 2016年

@Ipachecoは正解です。これは確かに受け入れられる答えです。
rjdamore 2016

2

追加するだけ

 <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
      <scope>runtime</scope>
 </dependency>

1

https://stackoverflow.com/a/41149866/1570834の @nirmals回答からの6.1.0.jre7への依存関係を含めるときに問題が発生している場合は、poms でcommons-codec / azure-keyvaultを使用することをお勧めします:

    <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc</artifactId>
       <version>6.2.2.jre7</version>                
    </dependency>

0

難しいことではありません。ライセンスをまだ読んでいません。しかし、私はこれがうまくいくことを証明しました。sqljdbc4 jarファイルをネットワーク共有またはローカルディレクトリにコピーできます。build.gradleは次のようになります。

apply plugin: 'java'
//apply plugin: 'maven'
//apply plugin: 'enhance'

sourceCompatibility = 1.8
version = '1.0'

//library versions
def hibernateVersion='4.3.10.Final'
def microsoftSQLServerJDBCLibVersion='4.0'
def springVersion='2.5.6'

def log4jVersion='1.2.16'
def jbossejbapiVersion='3.0.0.GA'

repositories {
    mavenCentral()
    maven{url "file://Sharedir/releases"}
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile "org.hibernate:hibernate-core:$hibernateVersion"
    compile "com.microsoft.sqlserver:sqljdbc4:$microsoftSQLServerJDBCLibVersion"
}

task showMeCache << {
    configurations.compile.each { println it }
}

sharedir / releasesディレクトリの下に、maven構造に似たディレクトリがあります。\ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jarです。

幸運を。

デビッドイェン


0

自己完結型のMavenプロジェクトの場合、通常、すべての外部jar依存関係をプロジェクトのリポジトリにインストールします。SQL Server JDBCドライバーの場合、次のことができます。

  • https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774からJDBCドライバーをダウンロードします
  • local-repoMavenプロジェクトにフォルダーを作成する
  • フォルダーsqljdbc42.jarへの一時的なコピーlocal-repo
  • ローカルリポジトリにJARをデプロイするためにlocal-repo実行mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.されるフォルダー内(SCM内のコードと一緒に格納されます)
  • sqljdbc42.jar ダウンロードしたファイルは削除できます
  • を変更して、pom.xmlプロジェクトのローカルリポジトリへの参照を追加します。 xml <repositories> <repository> <id>parent-local-repository</id> <name>Parent Local repository</name> <layout>default</layout> <url>file://${basedir}/local-repo</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> これで、追加の構成やインストールを行うことなく、どこでもプロジェクトを実行できます。

0

別のドライバーを使用できます

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.3.1</version>
</dependency>

とxmlで

<bean id="idNameDb" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
        <property name="url" value="jdbc:jtds:sqlserver://[ip]:1433;DatabaseName=[name]" />
        <property name="username" value="user" />
        <property name="password" value="password" />
</bean>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.