Artefact manquant com.microsoft.sqlserver: sqljdbc4: jar: 4.0

103

J'essaie d'ajouter une dépendance de pilote MS SQL dans mon fichier POM.xml et ce qui suit est la dépendance.

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

mais j'obtiens cette exception

Artefact manquant com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Je ne comprends vraiment pas le problème.

CodeNotFound
la source

Réponses:

160

METTRE À JOUR

Microsoft fournit désormais cet artefact dans maven central. Voir la réponse de @ nirmal pour plus de détails: https://stackoverflow.com/a/41149866/1570834


RÉPONSE ORIGINALE

Le problème est que Maven ne peut trouver cet artefact dans aucun des référentiels maven configurés .

Malheureusement, Microsoft ne rend pas cet artefact disponible via un référentiel maven. Vous devez télécharger le fichier jar à partir du site Web de Microsoft , puis l'installer manuellement dans votre référentiel maven local.

Vous pouvez le faire avec la commande maven suivante:

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

Ensuite, la prochaine fois que vous exécuterez maven sur votre POM, il trouvera l'artefact.

DB5
la source
merci pour la réponse mais je reçois ceci quand je lance la commande[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
Assurez-vous que sqljdbc4.jar est placé dans le répertoire dans lequel vous exécutez la commande, sinon fournissez explicitement le chemin complet.
Sergey Makarov
2
@Antony, comme le dit Sergey, vous devez exécuter la commande maven (comme indiqué dans ma réponse) à partir du même emplacement où vous avez téléchargé le sqljdbc4.jar ou fournir le chemin complet du fichier -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarpar exemple.
DB5
après avoir installé sqljdbc4.jar comme @ DB5 l'a dit, cela me donne toujours la même erreur lorsque j'exécute le package mvn dans mon projet, des pensées à ce sujet? Où est-il réellement installé? puis-je voir une liste des fichiers JAR installés localement à partir de mvn?
P-RAD
5
voir ma réponse ci-dessous, Microsoft (à partir de novembre 2016) a ajouté ce pilote jdbc à maven central
nirmal
73

Microsoft a récemment ouvert son pilote jdbc .

Vous pouvez maintenant trouver le pilote sur 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>

ou pour 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
la source
J'ai essayé de faire fonctionner cela pendant des heures et j'ai découvert que la version 7.4.1 ne charge pas de pilote pour moi par la version 7.0.0. Savez-vous pourquoi cela pourrait être le cas?
Archmede le
27

J'ai eu le même problème et je l'ai résolu en suivant.

  • Téléchargez sqljdbc4.jar depuis le site Web de Microsoft sur votre ordinateur local.
  • Cliquez avec le bouton droit sur Projet -> Importer -> Maven -> Installer ou déployer un artefact dans un référentiel Maven comme indiqué ci-dessous.

entrez la description de l'image ici

* Suivant -> Remplissez le

Artifact file: chemin des détails suivants du fichier jar que vous avez téléchargé (Ex: E: \ lib \ sqljdbc4.jar dans mon cas)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

entrez la description de l'image ici

  • Ensuite, actualisez / nettoyez le projet.

    Je vous remercie!
programmeur
la source
1
je reçois toujours ce problème
R.Anandan
1
Impressionnant!!! Mais j'ai dû actualiser le projet via Projet -> clic droit -> maven -> Mettre à jour le projet ...
Sanjeev Dhiman
11

La réponse ci-dessus ajoute uniquement le sqljdbc4.jar au référentiel local . En conséquence, lors de la création du fichier jar final du projet pour la distribution, sqljdbc4 sera à nouveau manquant, comme indiqué dans le commentaire de @Tony concernant l'erreur d'exécution.

Microsoft (et Oracle et d'autres fournisseurs tiers) restreignent la distribution de leurs logiciels conformément à l'ENU / EULA. Par conséquent, ces modules logiciels ne sont pas ajoutés dans les fichiers JAR produits par Maven pour la distribution. Il existe des hacks pour le contourner (comme fournir l'emplacement du fichier jar tiers au moment de l'exécution), mais en tant que développeur, vous devez faire attention à ne pas violer la licence.

Une meilleure approche pour les connecteurs / pilotes jdbc est d'utiliser jTDS , qui est compatible avec la plupart des SGBD, plus fiable, plus rapide (selon les benchmarks) et distribué sous licence GNU. Cela vous rendra la vie beaucoup plus facile à utiliser que d'essayer de marteler la cheville carrée dans le trou rond en suivant l'une des autres techniques ci-dessus.

Nelda.techspiress
la source
oh man jtds a sauvé ma journée, la configuration de sqljdbc4 avec gradle est un peu pénible le a * s
norbertas.gaulia
La seule chose est que jTDS ne prend pas en charge les mêmes fonctionnalités que le pilote de Microsoft. Par exemple, mise à jour par lots.
lpacheco le
1
il est regrettable que jTDS ne prenne pas en charge le type de données datetime2. Il semble que mes choix soient de lancer ma propre méthode datetime2-to-java-date, ou de passer par de nombreux obstacles pour que le pilote Microsoft fonctionne.
jkerak
À partir de 2017, le pilote n'a pas été mis à jour vers JDBC4 et est pratiquement mort, ne fonctionne pas avec HikariCP et les pools de connexion plus modernes.
Alfabravo
11

Vous pouvez également créer un référentiel de projet. C'est utile si plusieurs développeurs travaillent sur le même projet et que la bibliothèque doit être incluse dans le projet.

  • Tout d'abord, créez une structure de référentiel dans le répertoire lib de votre projet, puis copiez-y la bibliothèque. La bibliothèque doit avoir le format de nom suivant:<artifactId>-<version>.jar

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

  • Créez le fichier pom à côté du fichier de bibliothèque et mettez-y les informations suivantes:

    <?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>
    
  • À ce stade, vous devriez avoir cette structure de répertoires:

    <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

  • Accédez au fichier pom de votre projet et ajoutez un nouveau référentiel:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
    
  • Enfin, ajoutez une dépendance sur la bibliothèque:

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

Mise à jour 4.3.2017

Il semble que la bibliothèque puisse être obtenue à partir d'un référentiel accessible au public. @voir les réponses de Nirmal et Jacek Grzelaczyk pour plus de détails.

Václav Kužel
la source
Cela devrait être la réponse acceptée, à mon humble avis. Malgré le fait de mettre un binaire dans le référentiel git, c'est une solution fire and forget. Il n'y a pas besoin d'instructions supplémentaires sur la façon de déployer le pilote dans chaque référentiel local de développeur (ou de rechercher de l'aide sur StackOverflow).
lpacheco le
@Ipacheco a raison, cela devrait en effet être la réponse acceptée.
rjdamore
2

il suffit d'ajouter

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

Si vous rencontrez un problème lors de l'inclusion de la dépendance pour 6.1.0.jre7 de @nirmals, répondez à https://stackoverflow.com/a/41149866/1570834 , dans votre pom avec commons-codec / azure-keyvault, je préfère aller avec ceci :

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

Ce n'est pas trop dur. Je n'ai pas encore lu la licence. Cependant, j'ai prouvé que cela fonctionne. Vous pouvez copier le fichier jar sqljdbc4 sur un partage réseau ou un répertoire local. Votre build.gradle devrait ressembler à ceci:

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

sous le répertoire sharedir / releases, j'ai un répertoire similaire à la structure maven qui est \ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

bonne chance.

David Yen

David Mobile
la source
0

Pour un projet Maven autonome, j'installe généralement toutes les dépendances jar externes dans le référentiel du projet. Pour le pilote JDBC SQL Server, vous pouvez faire:

  • téléchargez le pilote JDBC à partir de https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • créer un dossier local-repodans votre projet Maven
  • copie temporaire sqljdbc42.jardans un local-repodossier
  • dans le local-repodossier exécuté mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.pour déployer JAR dans le référentiel local (stocké avec votre code dans SCM)
  • sqljdbc42.jar et les fichiers téléchargés peuvent être supprimés
  • modifier le vôtre pom.xmlet ajouter une référence au référentiel local du projet: 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> vous pouvez désormais exécuter votre projet partout sans aucune configuration ou installation supplémentaire.
Ramunas
la source
0

Vous pouvez utiliser un autre pilote

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

et en 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
la source