Manufatto com.microsoft.sqlserver: sqljdbc4: jar: 4.0


103

Sto cercando di aggiungere la dipendenza del driver MS SQL nel mio file POM.xml e quanto segue è la dipendenza.

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

ma ottengo questa eccezione

Manufatto com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Non capisco davvero il problema.

Risposte:


160

AGGIORNARE

Microsoft ora fornisce questo artefatto in Maven Central. Vedi la risposta di @ nirmal per ulteriori dettagli: https://stackoverflow.com/a/41149866/1570834


RISPOSTA ORIGINALE

Il problema è che Maven non riesce a trovare questo artefatto in nessuno dei repository Maven configurati .

Purtroppo Microsoft non rende disponibile questo artefatto tramite alcun repository esperto. È necessario scaricare il jar dal sito Web Microsoft e quindi installarlo manualmente nel repository Maven locale.

Puoi farlo con il seguente comando maven:

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

Quindi la prossima volta che esegui Maven sul tuo POM troverà l'artefatto.


grazie per la risposta ma ottengo questo quando [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]
eseguo

3
Assicurati che sqljdbc4.jar sia posto nella directory in cui stai eseguendo il comando, altrimenti fornisci il percorso completo in modo esplicito.
Sergey Makarov

2
@Antony, come dice Sergey, devi eseguire il comando maven (come indicato nella mia risposta) dalla stessa posizione in cui hai scaricato sqljdbc4.jar o fornire il percorso completo del file, -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarad esempio.
DB5

dopo aver installato sqljdbc4.jar come ha detto @ DB5, mi dà ancora lo stesso errore quando eseguo il pacchetto mvn nel mio progetto, qualche idea su questo? Dove viene effettivamente installato? posso vedere un elenco di jar installati localmente da mvn?
P-RAD

5
vedi la mia risposta di seguito, microsoft (a partire da novembre 2016) ha aggiunto questo driver jdbc a maven central
nirmal

73

Microsoft ha recentemente reso open source il proprio driver jdbc .

Ora puoi trovare il driver su 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>

o per 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>

Ho provato a farlo funzionare per ore e ho scoperto che la versione 7.4.1 non carica un driver per me dalla versione 7.0.0. Sai perché potrebbe essere così?
Archmede

27

Ho avuto il problema simile e l'ho risolto seguendo.

  • Scarica sqljdbc4.jar dal sito Web di Microsoft sul tuo computer locale.
  • Fare clic con il tasto destro su Progetto -> Importa -> Maven -> Installa o distribuisci un artefatto in un repository Maven come mostrato di seguito.

inserisci qui la descrizione dell'immagine

* Avanti -> Compila il seguente

Artifact file: percorso dei dettagli del jar che hai scaricato (Es: E: \ lib \ sqljdbc4.jar nel mio caso)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

inserisci qui la descrizione dell'immagine

  • Quindi Aggiorna / pulisci il progetto.

    Grazie!

1
ancora
ricevo

1
Eccezionale!!! Ma ho dovuto aggiornare il progetto tramite Progetto -> fare clic con il pulsante destro del mouse -> Maven -> Aggiorna progetto ...
Sanjeev Dhiman

11

La risposta precedente aggiunge solo sqljdbc4.jar al repository locale . Di conseguenza, durante la creazione del file jar finale del progetto per la distribuzione, sqljdbc4 sarà nuovamente mancante, come indicato nel commento di @Tony in merito all'errore di runtime.

Microsoft (e Oracle e altri fornitori di terze parti) limitano la distribuzione del loro software secondo l'ENU / EULA. Pertanto quei moduli software non vengono aggiunti nei vasi prodotti da Maven per la distribuzione. Ci sono hack per aggirare il problema (come fornire la posizione del file jar di terze parti in fase di esecuzione), ma come sviluppatore devi stare attento a violare la licenza.

Un approccio migliore per i connettori / driver jdbc consiste nell'usare jTDS , che è compatibile con la maggior parte dei DBMS, più affidabile, più veloce (secondo i benchmark) e distribuito sotto licenza GNU. Ti renderà la vita molto più facile da usare che provare a battere il piolo quadrato nel foro rotondo seguendo una delle altre tecniche sopra.


oh man jtds mi ha salvato la giornata, configurare sqljdbc4 con gradle è un po 'doloroso il a * s
norbertas.gaulia

L'unica cosa è che jTDS non supporta la stessa funzionalità del driver di Microsoft. Ad esempio, aggiornamento in batch.
lpacheco

1
è un peccato che jTDS non supporti il ​​tipo di dati datetime2. sembra che le mie scelte siano di eseguire il mio metodo datetime2-to-java-date, o passare attraverso molti cerchi per far funzionare il driver microsoft.
jkerak

A partire dal 2017, il driver non è stato aggiornato a JDBC4 ed è praticamente morto, non funziona con HikariCP e con i pool di connessione più moderni.
Alfabravo

11

Puoi anche creare un repository del progetto. È utile se più sviluppatori stanno lavorando allo stesso progetto e la libreria deve essere inclusa nel progetto.

  • Innanzitutto, crea una struttura di repository nella directory lib del tuo progetto, quindi copia la libreria al suo interno. La libreria deve avere il seguente formato del nome:<artifactId>-<version>.jar

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

  • Crea il file pom accanto al file della libreria e inserisci le seguenti informazioni al suo interno:

    <?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>
  • A questo punto, dovresti avere questa struttura di directory:

    <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

  • Vai al file pom del tuo progetto e aggiungi un nuovo repository:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Infine, aggiungi una dipendenza dalla libreria:

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

Aggiornamento 4.3.2017

Sembra che la libreria possa essere ottenuta da un repository disponibile pubblicamente. @vedi le risposte di nirmal e Jacek Grzelaczyk per maggiori dettagli.


Questa dovrebbe essere la risposta accettata, IMHO. Nonostante inserisca un binario nel repository git, è una soluzione che spara e dimentica. Non sono necessarie ulteriori istruzioni su come distribuire il driver in ciascun repository locale dello sviluppatore (o cercare aiuto in StackOverflow).
lpacheco

@Ipacheco è corretto, questa dovrebbe effettivamente essere la risposta accettata.
rjdamore

2

basta aggiungere

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

1

Se hai qualche problema quando includi la dipendenza per 6.1.0.jre7 da @nirmals rispondi in https://stackoverflow.com/a/41149866/1570834 , nel tuo pom con commons-codec / azure-keyvault preferisco andare con questo :

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

0

Non è troppo difficile. Non ho ancora letto la licenza. Tuttavia ho dimostrato che funziona. È possibile copiare il file jar sqljdbc4 in una condivisione di rete o in una directory locale. Il tuo build.gradle dovrebbe assomigliare a questo:

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

sotto la directory sharedir / releases, ho una directory simile alla struttura maven che è \ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

in bocca al lupo.

David Yen


0

Per il progetto Maven auto-contenente di solito installo tutte le dipendenze jar esterne nel repository del progetto. Per il driver JDBC di SQL Server puoi fare:

  • scarica il driver JDBC da https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • crea una cartella local-reponel tuo progetto Maven
  • copia temporanea sqljdbc42.jarnella local-repocartella
  • nella local-repocartella run mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.per distribuire JAR nel repository locale (archiviato insieme al codice in SCM)
  • sqljdbc42.jar e i file scaricati possono essere eliminati
  • modifica i tuoi pom.xmle aggiungi riferimenti al repository locale del progetto: 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> ora puoi eseguire il tuo progetto ovunque senza configurazioni o installazioni aggiuntive.

0

Puoi usare un altro driver

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

e 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.