web-dev-qa-db-fra.com

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

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

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

mais je reçois cette exception

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

Je ne comprends vraiment pas le problème.

96
SAR

UPDATE

Microsoft fournit maintenant 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 pas trouver cet artefact dans les 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, celui-ci trouvera l'artefact.

154
DB5

Microsoft récemment open source leur 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>
62
nirmal

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

  • Téléchargez sqljdbc4.jar à partir du 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.

enter image description here

* Suivant -> Complétez les informations suivantes

Artifact file: chemin du fichier téléchargé (Ex: E:\lib\sqljdbc4.jar dans mon cas)
Group Id: com.Microsoft.sqlserver
Artifact Id: sqljdbc4
Version: 4.0

enter image description here

  • Ensuite, actualisez/nettoyez le projet.

    Je vous remercie!
25
programmer

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

Microsoft (et Oracle et d’autres fournisseurs tiers) limitent la distribution de leurs logiciels conformément à ENU/EULA. Par conséquent, ces modules logiciels ne sont pas ajoutés dans les pots générés par Maven pour la distribution. Il existe des astuces pour le contourner (par exemple, en indiquant 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 consiste à utiliser jTDS, qui est compatible avec la plupart des SGBD, plus fiable et plus rapide ( selon les critères de référence), et distribué sous la licence GNU. Votre vie sera beaucoup plus facile à utiliser que d’essayer d’enfoncer la cheville carrée dans le trou rond en suivant l’une des techniques décrites ci-dessus.

11

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

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

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

  • Créez un 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épertoire:

    <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 à 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.

11
Václav Kužel

il suffit d'ajouter

 <dependency>
      <groupId>com.Microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
      <scope>runtime</scope>
 </dependency>
2
Jacek Grzelaczyk

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>
0
Jacek Grzelaczyk

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

0
David Mobile

Pour les projets Maven autonomes, j'installe généralement toutes les dépendances de jar externes dans le référentiel du projet. Pour le pilote JDBC SQL Server, vous pouvez effectuer les tâches suivantes:

  • télécharger le pilote JDBC depuis https://www.Microsoft.com/en-us/download/confirmation.aspx?id=11774
  • créer le dossier local-repo dans votre projet Maven
  • copie temporaire sqljdbc42.jar dans le dossier local-repo
  • dans le dossier local-repo, exécutez 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 le fichier JAR dans un référentiel local (stocké avec votre code dans SCM).
  • sqljdbc42.jar et les fichiers téléchargés peuvent être supprimés
  • modifiez votre pom.xml et ajoutez 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 maintenant exécuter votre projet partout, sans configuration ni installation supplémentaire.
0
Ramunas

Si vous rencontrez des problèmes lors de l'inclusion de la dépendance pour 6.1.0.jre7 de @nirmals, répondez dans 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>
0
ROOP