Artefato ausente com.microsoft.sqlserver: sqljdbc4: jar: 4.0

103

Estou tentando adicionar a dependência do driver MS SQL em meu arquivo POM.xml e o seguinte é a dependência.

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

mas eu recebo esta exceção

Artefato ausente com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Eu realmente não entendo o problema.

CodeNotFound
fonte

Respostas:

160

ATUALIZAR

A Microsoft agora fornece este artefato no maven central. Veja a resposta de @ nirmal para mais detalhes: https://stackoverflow.com/a/41149866/1570834


RESPOSTA ORIGINAL

O problema é que o Maven não consegue encontrar esse artefato em nenhum dos repositórios maven configurados .

Infelizmente, a Microsoft não disponibiliza esse artefato em nenhum repositório maven. Você precisa baixar o jar do site da Microsoft e, em seguida, instalá-lo manualmente em seu repositório maven local.

Você pode fazer isso com o seguinte comando maven:

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

Então, da próxima vez que você executar o maven em seu POM, ele encontrará o artefato.

DB5
fonte
obrigado pela resposta, mas eu recebo isso quando executo o 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
Certifique-se de que sqljdbc4.jar esteja localizado no diretório em que você está executando o comando, caso contrário, forneça o caminho completo explicitamente.
Sergey Makarov
2
@Antony, como Sergey diz, você precisa executar o comando maven (conforme fornecido em minha resposta) do mesmo local onde baixou o sqljdbc4.jar ou fornecer o caminho completo para o arquivo, -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarpor exemplo.
DB5
depois de instalar sqljdbc4.jar como @ DB5 disse, ainda me dá o mesmo erro quando executo o pacote mvn em meu projeto, alguma opinião sobre isso? Onde ele é realmente instalado? posso ver uma lista de jars instalados localmente da mvn?
P-RAD
5
veja minha resposta abaixo, a Microsoft (em novembro de 2016) adicionou este driver jdbc ao maven central
nirmal
73

A Microsoft recentemente abriu o código-fonte de seu driver jdbc .

Agora você pode encontrar o driver na central maven:

<!-- 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 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
fonte
Tentei fazer isso funcionar por horas e descobri que a versão 7.4.1 não carrega um driver para mim na versão 7.0.0. Você sabe por que isso pode ser o caso?
Arquimedes de
27

Eu tive o problema semelhante e resolvi fazendo o seguinte.

  • Baixe sqljdbc4.jar do site da Microsoft para sua máquina local.
  • Clique com o botão direito em Projeto -> Importar -> Maven -> Instalar ou implantar um artefato em um repositório Maven, conforme mostrado abaixo.

insira a descrição da imagem aqui

* Avançar -> Preencha o seguinte

Artifact file: caminho de detalhes do jar que você baixou (Ex: E: \ lib \ sqljdbc4.jar no meu caso)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

insira a descrição da imagem aqui

  • Em seguida, atualize / limpe o projeto.

    Obrigado!
programador
fonte
1
Ainda estou tendo esse problema
R.Anandan
1
Impressionante!!! Mas eu tive que atualizar o projeto via Projeto -> clique com o botão direito -> maven -> Atualizar Projeto ...
Sanjeev Dhiman
11

A resposta acima apenas adiciona o sqljdbc4.jar ao repositório local . Como resultado, ao criar o jar do projeto final para distribuição, o sqljdbc4 estará ausente novamente, conforme indicado no comentário de @Tony sobre o erro de tempo de execução.

A Microsoft (e a Oracle e outros fornecedores terceirizados) restringem a distribuição de seu software de acordo com o ENU / EULA. Portanto, esses módulos de software não são adicionados aos jars produzidos pelo Maven para distribuição. Existem hacks para contornar isso (como fornecer a localização do arquivo jar de terceiros no tempo de execução), mas como desenvolvedor, você deve ter cuidado para não violar o licenciamento.

Uma abordagem melhor para conectores / drivers jdbc é usar jTDS , que é compatível com a maioria dos SGBDs, mais confiável, mais rápido (conforme benchmarks) e distribuído sob licença GNU. Isso tornará sua vida muito mais fácil de usar do que tentar enfiar o pino quadrado no buraco redondo seguindo qualquer uma das outras técnicas acima.

Nelda.techspiress
fonte
oh cara, jtds salvou meu dia, configurar sqljdbc4 com gradle é um pouco chato o a * s
norbertas.gaulia
A única coisa é que o jTDS não suporta a mesma funcionalidade do driver da Microsoft. Por exemplo, atualização em lote.
lpacheco
1
é uma pena que o jTDS não suporte o tipo de dados datetime2. parece que minhas escolhas são rolar meu próprio método datetime2-to-java-date ou passar por muitos obstáculos para fazer o driver da Microsoft funcionar.
jkerak
Em 2017, o driver não foi atualizado para JDBC4 e está praticamente morto, não funciona com HikariCP e pools de conexões mais modernos.
Alfabravo
11

Você também pode criar um repositório de projeto. É útil se mais desenvolvedores estiverem trabalhando no mesmo projeto, e a biblioteca deve ser incluída no projeto.

  • Primeiro, crie uma estrutura de repositório no diretório lib do seu projeto e, em seguida, copie a biblioteca para ele. A biblioteca deve ter o seguinte formato de nome:<artifactId>-<version>.jar

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

  • Crie o arquivo pom próximo ao arquivo de biblioteca e coloque as seguintes informações nele:

    <?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>
  • Neste ponto, você deve ter esta estrutura de diretório:

    <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

  • Vá para o arquivo pom do seu projeto e adicione um novo repositório:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Finalmente, adicione uma dependência na biblioteca:

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

Atualização 4.3.2017

Parece que a biblioteca pode ser obtida em um repositório disponível publicamente. @ver as respostas de nirmal e Jacek Grzelaczyk para mais detalhes.

Václav Kužel
fonte
Esta deve ser a resposta aceita, IMHO. Apesar de colocar um binário no repositório git, é uma solução do tipo fogo e esqueça. Não há necessidade de mais instruções sobre como implantar o driver em cada repositório local do desenvolvedor (ou pesquisar StackOverflow para obter ajuda).
lpacheco de
@Ipacheco está correto, esta deveria ser a resposta aceita.
rjdamore
2

apenas adicione

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

Se você está tendo algum problema ao incluir dependência para 6.1.0.jre7 de @nirmals, responda em https://stackoverflow.com/a/41149866/1570834 , em seu pom com commons-codec / azure-keyvault, eu prefiro continuar com isso :

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

Não é muito difícil. Eu não li a licença ainda. No entanto, eu provei que isso funciona. Você pode copiar o arquivo jar sqljdbc4 para um compartilhamento de rede ou diretório local. Seu build.gradle deve ser assim:

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

no diretório sharedir / releases, tenho um diretório semelhante à estrutura maven que é \ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

boa sorte.

David Yen

David Mobile
fonte
0

Para projetos Maven auto-suficientes, geralmente instalo todas as dependências jar externas no repositório do projeto. Para o driver JDBC do SQL Server, você pode fazer:

  • baixe o driver JDBC em https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • crie uma pasta local-repoem seu projeto Maven
  • cópia temporária sqljdbc42.jarpara local-repopasta
  • na local-repopasta, execute 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 implantar JAR no repositório local (armazenado junto com o seu código no SCM)
  • sqljdbc42.jar e os arquivos baixados podem ser excluídos
  • modifique o seu pom.xmle adicione referência ao repositório local do projeto: 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> Agora você pode executar seu projeto em qualquer lugar, sem quaisquer configurações ou instalações adicionais.
Ramunas
fonte
0

Você pode usar outro driver

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

e em 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
fonte