Fehlendes Artefakt com.microsoft.sqlserver: sqljdbc4: jar: 4.0

103

Ich versuche, eine MS SQL-Treiberabhängigkeit in meine POM.xml-Datei einzufügen. Die folgende Abhängigkeit ist vorhanden.

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

aber ich bekomme diese Ausnahme

Fehlendes Artefakt com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Ich verstehe das Problem wirklich nicht.

CodeNotFound
quelle

Antworten:

160

AKTUALISIEREN

Microsoft stellt dieses Artefakt jetzt in Maven Central zur Verfügung. Weitere Informationen finden Sie in der Antwort von @ nirmal: https://stackoverflow.com/a/41149866/1570834


URSPRÜNGLICHE ANTWORT

Das Problem ist, dass Maven dieses Artefakt in keinem der konfigurierten Maven-Repositorys finden kann .

Leider stellt Microsoft dieses Artefakt nicht über ein Maven-Repository zur Verfügung. Sie müssen das JAR von der Microsoft-Website herunterladen und dann manuell in Ihrem lokalen Maven-Repository installieren.

Sie können dies mit dem folgenden Befehl maven tun:

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

Wenn Sie dann das nächste Mal Maven auf Ihrem POM ausführen, wird das Artefakt gefunden.

DB5
quelle
[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]
Vielen
3
Stellen Sie sicher, dass sich sqljdbc4.jar in dem Verzeichnis befindet, in dem Sie den Befehl ausführen. Andernfalls geben Sie den vollständigen Pfad explizit an.
Sergey Makarov
2
@Antony, wie Sergey sagt, müssen Sie entweder den Befehl maven (wie in meiner Antwort angegeben) an derselben Stelle ausführen, an der Sie die Datei sqljdbc4.jar heruntergeladen haben, oder beispielsweise den vollständigen Pfad zur Datei angeben -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar.
DB5
Nach der Installation von sqljdbc4.jar, wie @ DB5 sagte, gibt es immer noch den gleichen Fehler, wenn ich mvn package in meinem Projekt ausführe. Irgendwelche Gedanken dazu? Wo wird es tatsächlich installiert? kann ich eine liste lokal installierter jars von mvn sehen?
P-RAD
5
siehe meine Antwort unten, Microsoft (Stand November 2016) fügte diesen JDBC-Treiber zu Maven Central hinzu
Nirmal
73

Microsoft hat kürzlich seinen JDBC-Treiber als Open-Source-Version bereitgestellt .

Sie finden den Treiber jetzt auf 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>

oder für 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>
nirmal
quelle
Ich habe stundenlang versucht, dies zum Laufen zu bringen, und festgestellt, dass Version 7.4.1 bis Version 7.0.0 keinen Treiber für mich lädt. Wissen Sie, warum dies der Fall sein könnte?
Archmede
27

Ich hatte das ähnliche Problem und löste es, indem ich Folgendes tat.

  • Laden Sie sqljdbc4.jar von der Microsoft-Website auf Ihren lokalen Computer herunter.
  • Klicken Sie mit der rechten Maustaste auf Projekt -> Importieren -> Maven -> Installieren oder Bereitstellen eines Artefakts in einem Maven-Repository, wie unten gezeigt.

Geben Sie hier die Bildbeschreibung ein

* Weiter -> Geben Sie den folgenden

Artifact file: Detailpfad der heruntergeladenen JAR ein (Beispiel: E: \ lib \ sqljdbc4.jar in meinem Fall)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

Geben Sie hier die Bildbeschreibung ein

  • Aktualisieren / bereinigen Sie dann das Projekt.

    Danke dir!
Programmierer
quelle
1
Ich
bekomme
1
Genial!!! Aber ich musste das Projekt über Projekt aktualisieren -> Rechtsklick -> Maven -> Projekt aktualisieren ...
Sanjeev Dhiman
11

Die obige Antwort fügt nur die Datei sqljdbc4.jar zum lokalen Repository hinzu. Infolgedessen fehlt beim Erstellen des endgültigen Projekt-JARs für die Verteilung erneut sqljdbc4, wie im Kommentar von @Tony zum Laufzeitfehler angegeben.

Microsoft (und Oracle und andere Drittanbieter) beschränken die Verbreitung ihrer Software gemäß ENU / EULA. Daher werden diese Softwaremodule nicht in von Maven hergestellten Gläsern zur Verteilung hinzugefügt. Es gibt Hacks, um das Problem zu umgehen (z. B. den Speicherort der JAR-Datei eines Drittanbieters zur Laufzeit anzugeben), aber als Entwickler müssen Sie vorsichtig sein, wenn Sie gegen die Lizenzierung verstoßen.

Ein besserer Ansatz für JDBC-Konnektoren / -Treiber ist die Verwendung von jTDS , das mit den meisten DBMS kompatibel, zuverlässiger, schneller (gemäß Benchmarks) und unter GNU-Lizenz verteilt ist. Es wird Ihr Leben viel einfacher machen, dies zu verwenden, als zu versuchen, den quadratischen Stift nach einer der anderen oben genannten Techniken in das runde Loch zu schlagen.

Nelda.techspiress
quelle
oh man jtds hat mir den tag gerettet, sqljdbc4 mit gradle zu konfigurieren ist ein schmerz der a * s
norbertas.gaulia
Das einzige ist, dass jTDS nicht die gleiche Funktionalität wie der Microsoft-Treiber unterstützt. Zum Beispiel Batch-Update.
lpacheco
1
Es ist bedauerlich, dass jTDS den Datentyp datetime2 nicht unterstützt. Anscheinend habe ich die Wahl, meine eigene Methode datetime2-to-java-date zu verwenden oder viele Schritte zu durchlaufen, um den Microsoft-Treiber zum Laufen zu bringen.
Jkerak
Ab 2017 wurde der Treiber nicht auf JDBC4 aktualisiert und ist so gut wie tot. Er funktioniert nicht mit HikariCP und moderneren Conn-Pools.
Alfabravo
11

Sie können auch ein Projekt-Repository erstellen. Es ist nützlich, wenn mehr Entwickler an demselben Projekt arbeiten und die Bibliothek in das Projekt aufgenommen werden muss.

  • Erstellen Sie zunächst eine Repository-Struktur im lib-Verzeichnis Ihres Projekts und kopieren Sie dann die Bibliothek in dieses Verzeichnis. Die Bibliothek muss das folgende Namensformat haben:<artifactId>-<version>.jar

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

  • Erstellen Sie eine POM-Datei neben der Bibliotheksdatei und fügen Sie die folgenden Informationen ein:

    <?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>
  • Zu diesem Zeitpunkt sollten Sie diese Verzeichnisstruktur haben:

    <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

  • Gehen Sie zur POM-Datei Ihres Projekts und fügen Sie ein neues Repository hinzu:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Fügen Sie abschließend eine Abhängigkeit von der Bibliothek hinzu:

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

Update 4.3.2017

Es scheint, dass die Bibliothek aus einem öffentlich zugänglichen Repository bezogen werden kann. Weitere Informationen finden Sie in den Antworten von nirmal und Jacek Grzelaczyk.

Václav Kužel
quelle
Dies sollte die akzeptierte Antwort sein, IMHO. Obwohl eine Binärdatei in das Git-Repository eingefügt wird, handelt es sich um eine Lösung zum Feuern und Vergessen. Es sind keine weiteren Anweisungen zum Bereitstellen des Treibers in jedem lokalen Entwickler-Repository (oder zum Durchsuchen von StackOverflow nach Hilfe) erforderlich.
lpacheco
@Ipacheco ist richtig, dies sollte in der Tat die akzeptierte Antwort sein.
rjdamore
2

einfach hinzufügen

 <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
      <scope>runtime</scope>
 </dependency>
Jacek Grzelaczyk
quelle
1

Wenn Sie Probleme beim Einfügen der Abhängigkeit für 6.1.0.jre7 von @nirmals haben, antworten Sie in https://stackoverflow.com/a/41149866/1570834 , in Ihrem Pom mit Commons-Codec / Azure-Keyvault ::

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

Es ist nicht zu schwer. Ich habe die Lizenz noch nicht gelesen. Ich habe jedoch bewiesen, dass dies funktioniert. Sie können die JAR-Datei sqljdbc4 in eine Netzwerkfreigabe oder ein lokales Verzeichnis kopieren. Ihr build.gradle sollte folgendermaßen aussehen:

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 }
}

Unter dem Verzeichnis sharedir / release habe ich ein Verzeichnis ähnlich der Maven-Struktur: \ sharedir \ release \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

Viel Glück.

David Yen

David Mobile
quelle
0

Für ein in sich geschlossenes Maven-Projekt installiere ich normalerweise alle externen JAR-Abhängigkeiten im Projekt-Repository. Für den SQL Server JDBC-Treiber können Sie Folgendes tun:

  • Laden Sie den JDBC-Treiber von https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774 herunter
  • Erstellen Sie einen Ordner local-repoin Ihrem Maven-Projekt
  • temporäre Kopie sqljdbc42.jarin local-repoOrdner
  • im local-repoOrdner ausführen mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://., um JAR im lokalen Repository bereitzustellen (zusammen mit Ihrem Code in SCM gespeichert)
  • sqljdbc42.jar und heruntergeladene Dateien können gelöscht werden
  • Ändern Sie Ihre pom.xmlund fügen Sie einen Verweis auf das lokale Repository des Projekts hinzu: 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> Jetzt können Sie Ihr Projekt überall ohne zusätzliche Konfigurationen oder Installationen ausführen.
Ramunas
quelle
0

Sie können einen anderen Treiber verwenden

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

und in 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>
Jacek Grzelaczyk
quelle