ไม่มีสิ่งประดิษฐ์ com.microsoft.sqlserver: sqljdbc4: jar: 4.0


103

ฉันกำลังพยายามเพิ่มการพึ่งพาโปรแกรมควบคุม MS SQL ในไฟล์ POM.xml ของฉันและสิ่งต่อไปนี้คือการอ้างอิง

<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 ใด ๆ คุณต้องดาวน์โหลด jar จากเว็บไซต์ Microsoftจากนั้นติดตั้งลงในที่เก็บ maven ในเครื่องของคุณด้วยตนเอง

คุณสามารถทำได้ด้วยคำสั่ง maven ต่อไปนี้:

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

จากนั้นครั้งต่อไปที่คุณเรียกใช้ maven บน POM ของคุณมันจะพบสิ่งประดิษฐ์


ขอบคุณสำหรับคำตอบ แต่ฉันได้รับสิ่งนี้เมื่อฉันเรียกใช้คำสั่ง[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 กล่าวคุณต้องเรียกใช้คำสั่ง maven (ตามที่ให้ไว้ในคำตอบของฉัน) จากตำแหน่งเดียวกับที่คุณดาวน์โหลด sqljdbc4.jar ไปยังหรือระบุเส้นทางแบบเต็มไปยังไฟล์-Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarเช่น
DB5

หลังจากติดตั้ง sqljdbc4.jar ตามที่ @ DB5 กล่าวมันยังคงให้ข้อผิดพลาดเดียวกันกับฉันเมื่อฉันเรียกใช้แพ็คเกจ mvn ในโปรเจ็กต์ของฉันมีความคิดอย่างไร ติดตั้งจริงที่ไหน? ขอดูรายการขวดโหลที่ติดตั้งในเครื่องจาก mvn ได้ไหม
P-RAD

5
ดูคำตอบของฉันด้านล่าง microsoft (ณ พ.ย. 2016) ได้เพิ่มไดรเวอร์ 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

28

ฉันมีปัญหาที่คล้ายกันและแก้ไขได้โดยทำตาม

  • ดาวน์โหลด sqljdbc4.jar จากเว็บไซต์ Microsoft ลงในเครื่องของคุณ
  • คลิกขวาที่ 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
เจ๋ง !!! แต่ฉันต้องรีเฟรชโครงการผ่าน Project -> คลิกขวา -> maven -> Update Project ...
Sanjeev Dhiman

11

คำตอบข้างต้นเท่านั้นที่จะเพิ่ม sqljdbc4.jar ไปยังท้องถิ่นที่เก็บ ด้วยเหตุนี้เมื่อสร้าง jar โครงการสุดท้ายสำหรับการแจกจ่าย sqljdbc4 จะหายไปอีกครั้งตามที่ระบุไว้ในความคิดเห็นโดย @Tony เกี่ยวกับข้อผิดพลาดรันไทม์

Microsoft (และ Oracle และผู้ให้บริการบุคคลที่สามอื่น ๆ ) จำกัด การแจกจ่ายซอฟต์แวร์ของตนตาม ENU / EULA ดังนั้นโมดูลซอฟต์แวร์เหล่านั้นจึงไม่ถูกเพิ่มเข้าไปในไหที่ผลิตโดย Maven เพื่อแจกจ่าย มีการแฮ็กที่จะหลีกเลี่ยงได้ (เช่นการระบุตำแหน่งของไฟล์ jar ของบุคคลที่สามที่รันไทม์) แต่ในฐานะนักพัฒนาคุณต้องระวังเกี่ยวกับการละเมิดการให้ใบอนุญาต

แนวทางที่ดีกว่าสำหรับตัวเชื่อมต่อ / ไดรเวอร์ jdbc คือการใช้jTDSซึ่งเข้ากันได้กับ DBMS ส่วนใหญ่เชื่อถือได้มากกว่าเร็วกว่า (ตามเกณฑ์มาตรฐาน) และแจกจ่ายภายใต้ใบอนุญาต GNU มันจะทำให้ชีวิตของคุณง่ายขึ้นในการใช้สิ่งนี้มากกว่าการพยายามตอกหมุดสี่เหลี่ยมลงในรูกลมตามเทคนิคอื่น ๆ ข้างต้น


โอ้ man jtds บันทึกวันของฉันการกำหนดค่า sqljdbc4 ด้วย gradle เป็นความเจ็บปวดที่ a * s
norbertas.gaulia

สิ่งเดียวคือ jTDS ไม่รองรับการทำงานเช่นเดียวกับไดรเวอร์ของ Microsoft ตัวอย่างเช่นการอัปเดตแบทช์
lpacheco

1
โชคไม่ดีที่ jTDS ไม่รองรับชนิดข้อมูล datetime2 ดูเหมือนว่าตัวเลือกของฉันคือม้วนวิธี datetime2-to-java-date ของฉันเองหรือใช้ห่วงมากมายเพื่อให้ไดรเวอร์ไมโครซอฟท์ทำงาน
jkerak

ในปี 2560 ไดรเวอร์ยังไม่ได้รับการอัปเดตเป็น JDBC4 และค่อนข้างตายไปแล้วใช้งานไม่ได้กับ HikariCP และ conn pool ที่ทันสมัยกว่า
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

ดูเหมือนว่าไลบรารีสามารถหาได้จากพื้นที่เก็บข้อมูลสาธารณะ @ ดูคำตอบของ nirmal และ 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

หากคุณมีปัญหาเมื่อรวมการพึ่งพาสำหรับ 6.1.0.jre7 จาก @nirmals ตอบในhttps://stackoverflow.com/a/41149866/1570834ใน pom ของคุณด้วย commons-codec / azure-keyvault ฉันชอบใช้สิ่งนี้ :

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

0

ไม่ยากเกินไป ฉันยังไม่ได้อ่านใบอนุญาต อย่างไรก็ตามฉันได้พิสูจน์ผลงานนี้แล้ว คุณสามารถคัดลอกไฟล์ jar sqljdbc4 ไปยังเน็ตเวิร์กแชร์หรือโลคัลไดเร็กทอรี 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 / release ฉันมีไดเร็กทอรีที่คล้ายกับโครงสร้าง maven ซึ่งเป็น \ sharedir \ release \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

โชคดี.

เดวิดเยน


0

สำหรับโครงการ Maven ที่มีตัวเองฉันมักจะติดตั้งการพึ่งพา jar ภายนอกทั้งหมดลงในที่เก็บของโครงการ สำหรับไดรเวอร์ SQL Server JDBC คุณสามารถทำได้:

  • ดาวน์โหลดไดรเวอร์ JDBC จากhttps://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • สร้างโฟลเดอร์local-repoในโครงการ Maven ของคุณ
  • คัดลอกsqljdbc42.jarลงในlocal-repoโฟลเดอร์ชั่วคราว
  • ใน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://.เพื่อปรับใช้ JAR ในที่เก็บในเครื่อง (เก็บไว้พร้อมกับรหัสของคุณใน 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.