Falta el artefacto com.microsoft.sqlserver: sqljdbc4: jar: 4.0

103

Estoy tratando de agregar la dependencia del controlador MS SQL en mi archivo POM.xml y la siguiente es la dependencia.

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

pero obtengo esta excepción

Falta el artefacto com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Realmente no entiendo el problema.

CodeNotFound
fuente

Respuestas:

160

ACTUALIZAR

Microsoft ahora proporciona este artefacto en maven central. Consulte la respuesta de @ nirmal para obtener más detalles: https://stackoverflow.com/a/41149866/1570834


RESPUESTA ORIGINAL

El problema es que Maven no puede encontrar este artefacto en ninguno de los repositorios de Maven configurados .

Desafortunadamente, Microsoft no hace que este artefacto esté disponible a través de ningún repositorio maven. Debe descargar el archivo jar del sitio web de Microsoft y luego instalarlo manualmente en su repositorio local de maven.

Puede hacer esto con el siguiente comando maven:

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

Luego, la próxima vez que ejecute maven en su POM, encontrará el artefacto.

DB5
fuente
gracias por la respuesta, pero obtengo esto cuando ejecuto el comando[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
Asegúrese de que sqljdbc4.jar esté ubicado en el directorio en el que está ejecutando el comando; de lo contrario, proporcione la ruta completa explícitamente.
Sergey Makarov
2
@Antony, como dice Sergey, debe ejecutar el comando maven (como se indica en mi respuesta) desde la misma ubicación donde descargó sqljdbc4.jar o proporcionar la ruta completa al archivo, -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarpor ejemplo.
DB5
después de instalar sqljdbc4.jar como dijo @ DB5, todavía me da el mismo error cuando ejecuto el paquete mvn en mi proyecto, ¿alguna idea al respecto? ¿Dónde se instala realmente? ¿Puedo ver una lista de archivos jar instalados localmente desde mvn?
P-RAD
5
vea mi respuesta a continuación, microsoft (a partir de noviembre de 2016) agregó este controlador jdbc a maven central
nirmal
73

Microsoft abrió recientemente su controlador jdbc .

Ahora puede encontrar el controlador en 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 para 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
fuente
He intentado hacer que esto funcione durante horas y descubrí que la versión 7.4.1 no carga un controlador para mí con la versión 7.0.0. ¿Sabes por qué podría ser este el caso?
Archmede
27

Tuve un problema similar y lo resolví haciendo lo siguiente.

  • Descargue sqljdbc4.jar desde el sitio web de Microsoft a su máquina local.
  • Haga clic derecho en Proyecto -> Importar -> Maven -> Instalar o implementar un artefacto en un repositorio de Maven como se muestra a continuación.

ingrese la descripción de la imagen aquí

* Siguiente -> Complete la siguiente

Artifact file: ruta de detalles del jar que descargó (por ejemplo: E: \ lib \ sqljdbc4.jar en mi caso)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

ingrese la descripción de la imagen aquí

  • Luego actualice / limpie el proyecto.

    ¡Gracias!
programador
fuente
1
todavía estoy recibiendo este problema
R.Anandan
1
¡¡¡Increíble!!! Pero tuve que actualizar el proyecto a través de Proyecto -> clic derecho -> maven -> Actualizar proyecto ...
Sanjeev Dhiman
11

La respuesta anterior solo agrega sqljdbc4.jar al repositorio local . Como resultado, al crear el jar del proyecto final para su distribución, sqljdbc4 volverá a faltar como se indicó en el comentario de @Tony con respecto al error de tiempo de ejecución.

Microsoft (y Oracle y otros proveedores externos) restringen la distribución de su software según la ENU / EULA. Por lo tanto, esos módulos de software no se agregan en los frascos producidos por Maven para su distribución. Hay trucos para evitarlo (como proporcionar la ubicación del archivo jar de terceros en tiempo de ejecución), pero como desarrollador debe tener cuidado de no violar la licencia.

Un mejor enfoque para los conectores / controladores jdbc es usar jTDS , que es compatible con la mayoría de DBMS, más confiable, más rápido (según los puntos de referencia) y distribuido bajo licencia GNU. Hará su vida mucho más fácil usar esto que tratar de clavar la clavija cuadrada en el agujero redondo siguiendo cualquiera de las otras técnicas anteriores.

Nelda.techspiress
fuente
oh hombre jtds me salvó el día, configurar sqljdbc4 con gradle es un dolor de
cabeza
Lo único es que jTDS no admite la misma funcionalidad que el controlador de Microsoft. Por ejemplo, actualización por lotes.
lpacheco
1
Es lamentable que jTDS no admita el tipo de datos datetime2. Parece que mis opciones son lanzar mi propio método datetime2-to-java-date, o pasar por muchos aros para que funcione el controlador de Microsoft.
jkerak
A partir de 2017, el controlador no se ha actualizado a JDBC4 y está prácticamente muerto, no funciona con HikariCP y grupos de conexiones más modernos.
Alfabravo
11

También puede crear un repositorio de proyectos. Es útil si más desarrolladores están trabajando en el mismo proyecto y la biblioteca debe estar incluida en el proyecto.

  • Primero, cree una estructura de repositorio en el directorio lib de su proyecto y luego copie la biblioteca en él. La biblioteca debe tener el siguiente formato de nombre:<artifactId>-<version>.jar

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

  • Cree un archivo pom junto al archivo de la biblioteca y coloque la siguiente información en él:

    <?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>
  • En este punto, debería tener esta estructura de directorio:

    <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

  • Vaya al archivo pom de su proyecto y agregue un nuevo repositorio:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Finalmente, agregue una dependencia en la biblioteca:

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

Actualización 4.3.2017

Parece que la biblioteca se puede obtener del repositorio disponible públicamente. @ver las respuestas de nirmal y Jacek Grzelaczyk para más detalles.

Václav Kužel
fuente
Esta debería ser la respuesta aceptada, en mi humilde opinión. A pesar de poner un binario en el repositorio de git, es una solución para disparar y olvidar. No es necesario recibir más instrucciones sobre cómo implementar el controlador en cada repositorio local del desarrollador (o buscar ayuda en StackOverflow).
lpacheco
@Ipacheco tiene razón, esta debería ser la respuesta aceptada.
rjdamore
2

solo agrega

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

Si tiene algún problema al incluir la dependencia para 6.1.0.jre7 de la respuesta de @nirmals en https://stackoverflow.com/a/41149866/1570834 , en su pom con commons-codec / azure-keyvault prefiero ir con esto :

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

No es demasiado difícil. Aún no he leído la licencia. Sin embargo, he probado que esto funciona. Puede copiar el archivo jar sqljdbc4 a un recurso compartido de red o directorio local. Su build.gradle debería verse así:

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

bajo el directorio sharedir / releases, tengo un directorio similar a la estructura de maven que es \ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

buena suerte.

David Yen

David Mobile
fuente
0

Para el proyecto autónomo de Maven, generalmente instalo todas las dependencias de jar externas en el repositorio del proyecto. Para el controlador JDBC de SQL Server, puede hacer:

  • descargue el controlador JDBC de https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • crear carpeta local-repoen su proyecto Maven
  • copia temporal sqljdbc42.jaren local-repocarpeta
  • en la local-repocarpeta ejecutar mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.para implementar JAR en el repositorio local (almacenado junto con su código en SCM)
  • sqljdbc42.jar y los archivos descargados se pueden eliminar
  • modifique el suyo pom.xmly agregue una referencia al repositorio local del proyecto: 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> ahora puede ejecutar su proyecto en cualquier lugar sin configuraciones o instalaciones adicionales.
Ramunas
fuente
0

Puedes usar otro controlador

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

y 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
fuente