[sql-server] 누락 된 이슈 com.microsoft.sqlserver : sqljdbc4 : jar : 4.0

내 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

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



답변

최신 정보

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을 실행하면 아티팩트를 찾을 수 있습니다.


답변

마이크로 소프트는 최근에 그들의 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>


답변

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

  • 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

여기에 이미지 설명 입력

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

    감사합니다!


답변

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

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

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


답변

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

  • 먼저 프로젝트의 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의 답변을 참조하십시오.


답변

그냥 추가

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


답변

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>