Falta a comunicação do artefacto.base.sqlserver: sqljdbc4: jar: 4. 0
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
mas eu tenho esta excepção
Falta a comunicação do artefacto.base.sqlserver: sqljdbc4: jar: 4.0Eu realmente não entendo o problema.
10 answers
Actualizar
A Microsoft fornece agora este artefacto na Maven central. Veja a resposta de @nirmal para mais detalhes: https://stackoverflow.com/a/41149866/1570834RESPOSTA ORIGINAL
O problema é que a Maven não consegue encontrar este artefacto em nenhum dos repositórios de maven configurados. Infelizmente, a Microsoft não disponibiliza este artefacto através de nenhum repositório maven. Você precisa baixar o frasco do o Website da Microsoft , e depois instalá-lo manualmente no seu repositório Maven local.Pode fazer isto 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 puseres o maven no teu POM, ele vai encontrar o artefacto.
A Microsoft recentemente abriu o seu controlador jdbc.
Agora pode encontrar o condutor em 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 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>
- telecarregamento sqljdbc4.jar do website da Microsoft para a sua máquina local.
- carregue com o botão direito no projecto-->importar-->Maven-->instalar ou enviar um artefacto para um repositório Maven, como se mostra abaixo.
* a seguir-->preencha os seguintes detalhesArtifact file:
localização do frasco que transferiu (Ex: E:\lib\sqljdbc4.frasco no meu caso) Group Id:
suplemento.base.sqlserverArtifact Id:
sqljdbc4Version:
4.0
- Depois refresque / limpe o projecto.
Obrigado!
A resposta acima só adiciona o sqljdbc4.jar para o repositório local . Como resultado, ao criar o jar de projeto final para distribuição, o sqljdbc4 estará novamente em falta, como foi indicado no Comentário de @Tony sobre erro de tempo de execução.
A Microsoft (e a Oracle e outros fornecedores de terceiros) restringem a distribuição do seu software de acordo com a ENU/EULA. Portanto, esses módulos de software não são adicionados em frascos produzidos pela Maven para distribuição. Há hacks para contorná-lo (como fornecer a localização do arquivo jar de terceiros no tempo de execução), mas como desenvolvedor você deve ter cuidado em violar o licenciamento.
Uma melhor abordagem para conectores/drivers jdbc é usar jTDS, o que é compatível com a maioria dos DBMS, mais confiável, mais rápido (como por benchmarks), e distribuído sob licença GNU. Vai tornar a tua vida muito mais fácil de usar isto do que tentar enfiar a cavilha quadrada no buraco redondo seguindo qualquer um dos outros. técnicas acima.
Você também pode criar um repositório de projetos. É útil se mais desenvolvedores estão 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 então copie a biblioteca para ele. A biblioteca deve ter o seguinte Nome-formato:
<artifactId>-<version>.jar
<your_project_dir>/lib/com/microsoft/sqlserver/<artifactId>/<version>/
-
Crie o ficheiro pom ao lado do ficheiro da biblioteca, e coloque a seguinte informação em it:
<?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á ao ficheiro pom do seu projecto e adicione um novo repositório:
<repositories> <repository> <id>Project repository</id> <url>file://${basedir}/lib</url> </repository> </repositories>
-
Finalmente, adicione uma dependência da biblioteca:
<dependencies> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.2</version> </dependency> </dependencies>
Actualizar 4.3.2017
Parece que a biblioteca pode ser obtida a partir do repositório disponível ao público. @veja as respostas de Nirmal e Jacek Grzelaczyk para mais detalhes.
Basta adicionar
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<scope>runtime</scope>
</dependency>
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 }
}
Na pasta sharedir / releases, tenho uma pasta semelhante à estrutura maven que é \sharedir\releases\com\microsoft\sqlserver\sqljdbc4\4.0\sqljdbc4-4.0.jar
Boa sorte. David YenPara o projecto Maven auto-contendo, normalmente instalo todas as dependências externas dos jar no repositório do projecto. Para o controlador JDBC do servidor SQL, pode fazer:
- Telecarregamento do controlador JDBC de https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
- crie a pasta
local-repo
no seu projecto Maven - cópia temporária
sqljdbc42.jar
Paralocal-repo
pasta - em
local-repo
pasta executarmvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.
para enviar o JAR para o repositório local (guardado em conjunto com o seu código no SCM) -
sqljdbc42.jar
e os ficheiros descarregados podem ser apagados - modifique o seu
pom.xml
e adicione referência ao repositório local do projecto: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 o seu projeto em todos os lugares sem quaisquer configurações ou instalações adicionais.
Pode usar outro condutor
<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>
Se estiver a ter algum problema ao incluir a dependência de 6.1. 0.jre7 de @nirmals responde em https://stackoverflow.com/a/41149866/1570834 , no teu pom com commons-codec/ azure-keyvault prefiro ir com isto:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.2.jre7</version>
</dependency>