Artefak yang hilang com.microsoft.sqlserver: sqljdbc4: jar: 4.0


103

Saya mencoba untuk menambahkan ketergantungan driver MS SQL di file POM.xml saya dan berikut ini adalah ketergantungannya.

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

tapi saya mendapatkan pengecualian ini

Artefak yang hilang com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Saya benar-benar tidak mengerti masalahnya.

Jawaban:


160

MEMPERBARUI

Microsoft kini menyediakan artefak ini di maven central. Lihat jawaban @ nirmal untuk detail lebih lanjut: https://stackoverflow.com/a/41149866/1570834


JAWABAN ASLI

Masalahnya adalah Maven tidak dapat menemukan artefak ini di repositori maven mana pun yang dikonfigurasi .

Sayangnya Microsoft tidak membuat artefak ini tersedia melalui repositori maven mana pun. Anda perlu mengunduh jar dari situs web Microsoft , dan kemudian menginstalnya secara manual ke dalam repositori maven lokal Anda.

Anda dapat melakukan ini dengan perintah maven berikut:

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

Kemudian lain kali Anda menjalankan maven di POM Anda, artefak itu akan ditemukan.


terima kasih atas jawabannya tetapi saya mendapatkan ini ketika saya menjalankan perintah[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
Pastikan sqljdbc4.jar adalah tempat di direktori tempat Anda menjalankan perintah, jika tidak berikan jalur lengkap secara eksplisit.
Sergey Makarov

2
@ Antony, seperti yang dikatakan Sergey, Anda perlu menjalankan perintah maven (seperti yang diberikan dalam jawaban saya) dari lokasi yang sama tempat Anda mengunduh sqljdbc4.jar ke atau memberikan path lengkap ke file tersebut -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarmisalnya.
DB5

setelah menginstal sqljdbc4.jar sebagai @ DB5 berkata, Itu masih memberi saya kesalahan yang sama ketika saya menjalankan paket mvn di proyek saya, ada pemikiran tentang itu? Di mana sebenarnya itu dipasang? dapatkah saya melihat daftar toples yang dipasang secara lokal dari mvn?
P-RAD

5
lihat jawaban saya di bawah ini, microsoft (per nov 2016) menambahkan driver jdbc ini ke maven central
nirmal

73

Microsoft baru-baru ini membuka sumber driver jdbc mereka .

Anda sekarang dapat menemukan pengemudi di 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>

atau untuk 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>

Saya telah mencoba membuat ini bekerja selama berjam-jam dan menemukan bahwa versi 7.4.1 tidak memuat driver untuk saya dengan versi 7.0.0. Tahukah Anda mengapa ini mungkin terjadi?
Archmede

27

Saya memiliki masalah yang sama dan menyelesaikannya dengan mengikuti.

  • Unduh sqljdbc4.jar dari situs web Microsoft ke mesin lokal Anda.
  • Klik kanan pada Project -> Import -> Maven -> Instal atau terapkan artefak ke repositori Maven seperti yang ditunjukkan di bawah ini.

masukkan deskripsi gambar di sini

* Berikutnya -> Isi

Artifact file: jalur detail berikut dari jar yang Anda unduh (Contoh: E: \ lib \ sqljdbc4.jar dalam kasus saya)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

masukkan deskripsi gambar di sini

  • Kemudian Segarkan / bersihkan proyek.

    Terima kasih!

1
masih saya mendapatkan masalah ini
R. Anandan

1
Luar biasa !!! Tetapi saya harus menyegarkan proyek melalui Proyek -> klik kanan -> maven -> Perbarui Proyek ...
Sanjeev Dhiman

11

Jawaban di atas hanya menambahkan sqljdbc4.jar ke repositori lokal . Akibatnya, saat membuat jar proyek akhir untuk distribusi, sqljdbc4 akan hilang lagi seperti yang ditunjukkan dalam komentar oleh @Tony mengenai error runtime.

Microsoft (dan Oracle serta penyedia pihak ketiga lainnya) membatasi distribusi perangkat lunak mereka sesuai dengan ENU / EULA. Oleh karena itu modul perangkat lunak tersebut tidak ditambahkan ke dalam stoples yang diproduksi Maven untuk distribusi. Ada peretasan untuk menyiasatinya (seperti menyediakan lokasi file jar pihak ke-3 saat runtime), tetapi sebagai pengembang Anda harus berhati-hati dalam melanggar lisensi.

Pendekatan yang lebih baik untuk konektor / driver jdbc adalah dengan menggunakan jTDS , yang kompatibel dengan sebagian besar DBMS, lebih dapat diandalkan, lebih cepat (sesuai benchmark), dan didistribusikan di bawah lisensi GNU. Ini akan membuat hidup Anda lebih mudah untuk menggunakan ini daripada mencoba menumbuk pasak persegi ke dalam lubang bundar mengikuti salah satu teknik lain di atas.


oh man jtds menyelamatkan hariku, mengonfigurasi sqljdbc4 dengan gradle agak merepotkan a * s
norbertas.gaulia

Satu-satunya masalah adalah bahwa jTDS tidak mendukung fungsionalitas yang sama dengan driver Microsoft. Misalnya, pembaruan batch.
lpacheco

1
sangat disayangkan bahwa jTDS tidak mendukung tipe data datetime2. tampaknya pilihan saya adalah menggulung metode datetime2-to-java-date saya sendiri, atau melalui banyak rintangan untuk mendapatkan driver microsoft untuk bekerja.
jkerak

Pada 2017, driver belum diperbarui ke JDBC4 dan hampir mati, tidak berfungsi dengan HikariCP dan kolam koneksi yang lebih modern.
Alfabravo

11

Anda juga dapat membuat repositori proyek. Ini berguna jika lebih banyak pengembang yang mengerjakan proyek yang sama, dan pustaka harus disertakan dalam proyek.

  • Pertama, buat struktur repositori di direktori lib proyek Anda, lalu salin pustaka ke dalamnya. Pustaka harus memiliki format nama berikut:<artifactId>-<version>.jar

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

  • Buat file pom di sebelah file perpustakaan, dan masukkan informasi berikut ke dalamnya:

    <?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>
  • Pada titik ini, Anda harus memiliki struktur direktori ini:

    <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

  • Buka file pom proyek Anda dan tambahkan repositori baru:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Terakhir, tambahkan ketergantungan pada pustaka:

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

Perbarui 4.3.2017

Sepertinya pustaka dapat diperoleh dari repositori yang tersedia untuk umum. @ Lihat jawaban nirmal dan Jacek Grzelaczyk untuk lebih jelasnya.


Ini harus menjadi jawaban yang diterima, IMHO. Meskipun menempatkan biner ke dalam repositori git, itu adalah solusi api dan lupakan. Tidak perlu instruksi lebih lanjut tentang cara menerapkan driver ke setiap repositori lokal pengembang (atau mencari bantuan StackOverflow).
lpacheco

@Ipacheco benar, ini memang harus menjadi jawaban yang diterima.
rjdamore

2

tambahkan saja

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

1

Jika Anda mengalami beberapa masalah saat menyertakan ketergantungan untuk 6.1.0.jre7 dari @nirmals jawaban di https://stackoverflow.com/a/41149866/1570834 , di pom Anda dengan commons-codec / azure-keyvault, saya lebih suka menggunakan ini :

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

0

Tidak terlalu sulit. Saya belum membaca lisensinya. Namun saya telah membuktikan ini berhasil. Anda dapat menyalin file jar sqljdbc4 ke berbagi jaringan atau direktori lokal. Build.gradle Anda akan terlihat seperti ini:

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

di bawah direktori sharedir / rilis, saya memiliki direktori yang mirip dengan struktur maven yaitu \ sharedir \ release \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

semoga berhasil.

David Yen


0

Untuk proyek Maven mandiri, saya biasanya menginstal semua dependensi jar eksternal ke dalam repositori proyek. Untuk driver SQL Server JDBC, Anda dapat melakukan:

  • unduh driver JDBC dari https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • buat folder local-repodi proyek Maven Anda
  • salin sementara sqljdbc42.jarke local-repofolder
  • dalam local-repofolder, jalankan mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.untuk menerapkan JAR ke dalam repositori lokal (disimpan bersama dengan kode Anda di SCM)
  • sqljdbc42.jar dan file yang diunduh dapat dihapus
  • memodifikasi milik Anda pom.xmldan menambahkan referensi ke repositori lokal proyek: 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> Sekarang Anda dapat menjalankan proyek Anda di mana saja tanpa konfigurasi atau instalasi tambahan.

0

Anda dapat menggunakan driver lain

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

dan dalam 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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.