누락 된 이슈 com.microsoft.sqlserver : sqljdbc4 : jar : 4.0


103

내 POM.xml 파일에 MS SQL 드라이버 종속성을 추가하려고하는데 다음은 종속성입니다.

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

하지만이 예외가 발생합니다

누락 된 이슈 com.microsoft.sqlserver : sqljdbc4 : jar : 4.0

나는 정말로 문제를 이해하지 못한다.

답변:


160

최신 정보

Microsoft는 이제 Maven Central에서이 아티팩트를 제공합니다. 자세한 내용은 @nirmal의 답변을 참조하십시오 : https://stackoverflow.com/a/41149866/1570834


원래 답변

문제는 Maven이 구성된 Maven 리포지토리 에서이 아티팩트를 찾을 수 없다는 것 입니다.

안타깝게도 Microsoft는 Maven 저장소를 통해이 아티팩트를 제공하지 않습니다. Microsoft 웹 사이트 에서 jar를 다운로드 한 다음 로컬 Maven 저장소에 수동으로 설치해야합니다.

다음 maven 명령으로이를 수행 할 수 있습니다.

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

그런 다음 다음에 POM에서 maven을 실행하면 아티팩트를 찾을 수 있습니다.


내가 명령을 실행할 때 답변에 대한 감사하지만 난이 얻을[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
sqljdbc4.jar이 명령을 실행중인 디렉토리에 있는지 확인하십시오. 그렇지 않으면 전체 경로를 명시 적으로 제공하십시오.
Sergey Makarov

2
@Antony는 Sergey가 말했듯이 sqljdbc4.jar를 다운로드 한 동일한 위치에서 maven 명령 (내 대답에 나와 있음)을 실행하거나 파일의 전체 경로를 제공해야합니다 -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar.
DB5

@ DB5가 말했듯이 sqljdbc4.jar을 설치 한 후 프로젝트에서 mvn 패키지를 실행할 때 여전히 동일한 오류가 발생합니다. 실제로 어디에 설치됩니까? mvn에서 로컬로 설치된 jar 목록을 볼 수 있습니까?
P-RAD

5
아래 내 대답을 참조하십시오 . microsoft (2016 년 11 월 기준)가이 jdbc 드라이버를 maven central에 추가했습니다
nirmal

73

마이크로 소프트는 최근에 그들의 jdbc 드라이버를 오픈 소스했다 .

이제 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>

또는 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>

이 작업을 몇 시간 동안 시도한 결과 버전 7.4.1이 버전 7.0.0에서 나를 위해 드라이버를로드하지 않는다는 것을 알았습니다. 왜 그런지 아십니까?
Archmede

27

비슷한 문제가 있었고 다음을 수행하여 해결했습니다.

  • Microsoft 웹 사이트에서 로컬 컴퓨터로 sqljdbc4.jar을 다운로드합니다.
  • Project-> Import-> Maven-> 아래 그림과 같이 Maven 저장소에 아티팩트를 설치하거나 배포합니다.

여기에 이미지 설명 입력

* 다음->

Artifact file: 다운로드 한 jar 의 다음 세부 경로를 입력합니다 (예 : 내 경우에는 E : \ lib \ sqljdbc4.jar)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

여기에 이미지 설명 입력

  • 그런 다음 프로젝트를 새로 고치거나 정리하십시오.

    감사합니다!

1
여전히 나는이 문제가 발생합니다
R.Anandan

1
대박!!! 하지만이 프로젝트를 통해 프로젝트를 새로했다 -> 오른쪽 클릭 -> 받는다는 -> 업데이트 프로젝트 ...
산지 브 Dhiman

11

위의 대답은 로컬 저장소에 sqljdbc4.jar 만 추가 합니다. 결과적으로 배포 용 최종 프로젝트 jar를 만들 때 런타임 오류에 대한 @Tony의 주석에 표시된대로 sqljdbc4가 다시 누락됩니다.

Microsoft (및 Oracle 및 기타 제 3 자 제공 업체)는 ENU / EULA에 따라 소프트웨어 배포를 제한합니다. 따라서 해당 소프트웨어 모듈은 배포를 위해 Maven에서 생성 한 jar에 추가되지 않습니다. 이를 우회 할 수있는 해킹이 있지만 (예 : 런타임에 타사 jar 파일의 위치를 ​​제공하는 등) 개발자로서 라이선스 위반에주의해야합니다.

jdbc 커넥터 / 드라이버에 대한 더 나은 접근 방식은 jTDS 를 사용 하는 것입니다.이 jTDS 는 대부분의 DBMS와 호환되며 더 안정적이고 빠르며 (벤치 마크에 따라) GNU 라이선스에 따라 배포됩니다. 위의 다른 기술 중 하나에 따라 둥근 구멍에 사각형 말뚝을 두드리는 것보다 이것을 사용하는 것이 훨씬 더 쉽습니다.


약간의 고통은 A *의 오 남자 jtds 라이브러리가 Gradle을 가진 sqljdbc4를 구성, 내 하루 구원입니다
norbertas.gaulia

유일한 것은 jTDS가 Microsoft의 드라이버와 동일한 기능을 지원하지 않는다는 것입니다. 예를 들어 일괄 업데이트입니다.
lpacheco

1
유감스럽게도 jTDS가 datetime2 데이터 유형을 지원하지 않습니다. 내 선택은 내 자신의 datetime2-to-java-date 메서드를 롤링하거나 Microsoft 드라이버가 작동하도록 많은 수고를 겪는 것 같습니다.
jkerak

2017 년 현재 드라이버는 JDBC4로 업데이트되지 않았으며 거의 ​​죽었고 HikariCP 및 최신 연결 풀에서 작동하지 않습니다.
Alfabravo

11

프로젝트 저장소를 만들 수도 있습니다. 더 많은 개발자가 동일한 프로젝트에서 작업하고 라이브러리가 프로젝트에 포함되어야하는 경우 유용합니다.

  • 먼저 프로젝트의 lib 디렉토리에 리포지토리 구조를 만든 다음 라이브러리를 여기에 복사합니다. 라이브러리는 다음 이름 형식이어야합니다.<artifactId>-<version>.jar

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

  • 라이브러리 파일 옆에 pom 파일을 만들고 다음 정보를 넣습니다.

    <?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>
  • 이 시점에서 다음과 같은 디렉토리 구조가 있어야합니다.

    <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

  • 프로젝트의 pom 파일로 이동하여 새 저장소를 추가합니다.

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • 마지막으로 라이브러리에 대한 종속성을 추가하십시오.

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

4.3.2017 업데이트

공개적으로 사용 가능한 저장소에서 라이브러리를 얻을 수있는 것 같습니다. 자세한 내용은 @see nirmal 's 및 Jacek Grzelaczyk의 답변을 참조하십시오.


이것은 받아 들여진 대답이어야합니다, IMHO. 바이너리를 git 저장소에 넣음에도 불구하고 그것은 화재 및 잊어 버리는 솔루션입니다. 각 개발자 로컬 리포지토리에 드라이버를 배포하는 방법에 대한 추가 지침이 필요하지 않습니다 (또는 StackOverflow에서 도움말을 검색).
lpacheco

@Ipacheco가 정확합니다. 이것은 실제로 받아 들여지는 대답입니다.
rjdamore

2

그냥 추가

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

1

https://stackoverflow.com/a/41149866/1570834의 @nirmals 답변에서 6.1.0.jre7에 대한 종속성을 포함 할 때 몇 가지 문제가있는 경우 commons-codec / azure-keyvault가있는 pom에서이 작업을 선호합니다. :

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

0

너무 어렵지 않습니다. 아직 라이센스를 읽지 않았습니다. 그러나 나는 이것이 효과가 있음을 입증했습니다. sqljdbc4 jar 파일을 네트워크 공유 또는 로컬 디렉토리에 복사 할 수 있습니다. build.gradle은 다음과 같아야합니다.

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

sharedir / releases 디렉토리 아래에 \ sharedir \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar 인 maven 구조와 유사한 디렉토리가 있습니다.

행운을 빕니다.

데이비드 엔


0

자체 포함 Maven 프로젝트의 경우 일반적으로 모든 외부 jar 종속성을 프로젝트의 저장소에 설치합니다. SQL Server JDBC 드라이버의 경우 다음을 수행 할 수 있습니다.

  • https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774 에서 JDBC 드라이버를 다운로드합니다.
  • local-repoMaven 프로젝트에 폴더 생성
  • 임시 복사본 sqljdbc42.jar으로 local-repo폴더
  • 로컬 저장소에 JAR을 배포하기 위해 local-repo실행 되는 폴더 mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.에서 (SCM의 코드와 함께 저장 됨)
  • sqljdbc42.jar 다운로드 한 파일을 삭제할 수 있습니다.
  • 수정 pom.xml및 프로젝트의 로컬 저장소에 대한 참조 추가 : 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> 이제 추가 구성이나 설치없이 어디서나 프로젝트를 실행할 수 있습니다.

0

다른 드라이버를 사용할 수 있습니다.

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

및 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.