Eksik yapı com.microsoft.sqlserver: sqljdbc4: jar: 4.0


103

POM.xml dosyama MS SQL sürücü bağımlılığı eklemeye çalışıyorum ve aşağıdaki bağımlılıktır.

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

ama bu istisnayı anlıyorum

Eksik yapı com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Konuyu gerçekten anlamıyorum.

Yanıtlar:


160

GÜNCELLEME

Microsoft şimdi bu yapıyı maven central'da sağlıyor. Daha fazla ayrıntı için @ nirmal'ın cevabına bakın: https://stackoverflow.com/a/41149866/1570834


ORİJİNAL CEVAP

Sorun, Maven'in bu yapıyı yapılandırılmış maven depolarının hiçbirinde bulamamasıdır .

Maalesef Microsoft bu yapıyı herhangi bir maven deposu aracılığıyla kullanıma sunmuyor. Jar'ı Microsoft web sitesinden indirmeniz ve ardından yerel maven deponuza manuel olarak yüklemeniz gerekir.

Bunu aşağıdaki maven komutuyla yapabilirsiniz:

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

Sonra bir dahaki sefere POM'unuzda maven çalıştırdığınızda, yapıyı bulacaktır.


cevap için teşekkürler ama komutu çalıştırdığımda bunu [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]
anlıyorum

3
Sqljdbc4.jar dosyasının komutu çalıştırdığınız dizinde olduğundan emin olun, aksi takdirde tam yolu açıkça belirtin.
Sergey Makarov

2
@Antony, Sergey'in dediği gibi, maven komutunu (cevabımda verildiği gibi) sqljdbc4.jar dosyasını indirdiğiniz yerden çalıştırmanız veya -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jarörneğin dosyanın tam yolunu sağlamanız gerekir .
DB5

@ DB5'in dediği gibi sqljdbc4.jar'ı yükledikten sonra, projemde mvn paketini çalıştırdığımda hala aynı hatayı veriyor, bu konuda herhangi bir fikrin var mı? Gerçekte nereye kurulur? mvn'den yerel olarak yüklenmiş kavanozların bir listesini görebilir miyim?
P-RAD

5
bkz benim cevap maven merkezi için microsoft (nov 2016 itibariyle) eklendi bu jdbc sürücü, aşağıda
nirmal

73

Microsoft kısa süre önce jdbc sürücüsünü açık kaynaklı hale getirdi .

Şimdi sürücüyü maven merkezde bulabilirsiniz:

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

veya java 7 için:

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

Bu işi saatlerce yapmayı denedim ve 7.4.1 sürümünün 7.0.0 sürümüne göre benim için bir sürücü yüklemediğini öğrendim. Bunun neden böyle olabileceğini biliyor musunuz?
Archmede

28

Ben de benzer problemi yaşadım ve aşağıdakileri yaparak çözdüm.

  • Sqljdbc4.jar dosyasını Microsoft web sitesinden yerel makinenize indirin.
  • Proje -> İçe Aktar -> Maven -> Bir yapıyı aşağıda gösterildiği gibi Maven deposuna kur veya dağıt üzerine sağ tıklayın.

görüntü açıklamasını buraya girin

* Sonraki ->

Artifact file: İndirdiğiniz kavanozun aşağıdaki ayrıntı yolunu doldurun (Örn: E: \ lib \ sqljdbc4.jar benim durumumda)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

görüntü açıklamasını buraya girin

  • Ardından projeyi yenileyin / temizleyin.

    Teşekkür ederim!

1
hala bu sorunu alıyorum
R.Anandan

1
Harika !!! Ancak Proje -> sağ tıklama -> maven -> Projeyi Güncelle ...
Sanjeev Dhiman

11

Yukarıdaki yanıt yalnızca sqljdbc4.jar dosyasını yerel depoya ekler . Sonuç olarak, dağıtım için son proje kavanozu oluşturulurken, sqljdbc4, @Tony'nin çalışma zamanı hatasıyla ilgili yorumunda belirtildiği gibi yine eksik olacaktır.

Microsoft (ve Oracle ve diğer üçüncü taraf sağlayıcılar) yazılımlarının dağıtımını ENU / EULA uyarınca kısıtlar. Bu nedenle, bu yazılım modülleri dağıtım için Maven tarafından üretilen kavanozlara eklenmez. Aşılması gereken hackler vardır (çalışma zamanında 3. taraf jar dosyasının konumunu sağlamak gibi), ancak bir geliştirici olarak lisanslamayı ihlal etme konusunda dikkatli olmalısınız.

Jdbc bağlayıcıları / sürücüleri için daha iyi bir yaklaşım , çoğu DBMS ile uyumlu, daha güvenilir, daha hızlı (kıyaslamalara göre) ve GNU lisansı altında dağıtılan jTDS'yi kullanmaktır . Bunu kullanmak hayatınızı yukarıdaki diğer tekniklerden herhangi birini izleyerek kare çiviyi yuvarlak deliğe vurmaya çalışmaktan çok daha kolay hale getirecektir.


oh adam jtds benim günümü kurtardı, sqljdbc4'ü gradle ile yapılandırmak biraz acıdır a * s
norbertas.gaulia

Tek şey, jTDS'nin Microsoft'un sürücüsüyle aynı işlevselliği desteklememesidir. Örneğin, toplu güncelleme.
lpacheco

1
jTDS'nin datetime2 veri türünü desteklememesi talihsiz bir durumdur. Görünüşe göre seçimlerim kendi datetime2-java-tarih yöntemimi döndürmek veya microsoft sürücüsünün çalışmasını sağlamak için birçok çemberden geçmek.
jkerak

2017 itibariyle, sürücü JDBC4'e güncellenmedi ve hemen hemen öldü, HikariCP ve daha modern bağlantı havuzları ile çalışmıyor.
Alfabravo

11

Ayrıca bir proje deposu da oluşturabilirsiniz. Aynı proje üzerinde daha fazla geliştirici çalışıyorsa ve kitaplığın projeye dahil edilmesi yararlıdır.

  • İlk olarak, projenizin lib dizininde bir depo yapısı oluşturun ve ardından kitaplığı içine kopyalayın. Kitaplık aşağıdaki ad biçimine sahip olmalıdır:<artifactId>-<version>.jar

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

  • Kitaplık dosyasının yanında pom dosyası oluşturun ve aşağıdaki bilgileri buna ekleyin:

    <?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>
  • Bu noktada, şu dizin yapısına sahip olmalısınız:

    <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

  • Projenizin pom dosyasına gidin ve yeni depo ekleyin:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Son olarak, kitaplığa bir bağımlılık ekleyin:

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

4.3.2017 Güncellemesi

Kütüphane, halka açık bir depodan elde edilebiliyor gibi görünüyor. @ daha fazla ayrıntı için nirmal'ın ve Jacek Grzelaczyk'in yanıtlarına bakın.


Kabul edilen cevap bu olmalı, IMHO. Git deposuna bir ikili dosya koymasına rağmen, bu bir ateş ve unut çözümüdür. Sürücünün her geliştirici yerel havuzuna nasıl dağıtılacağına (veya yardım için StackOverflow aranmasına) ilişkin daha fazla talimata gerek yoktur.
lp Pacheco

@Ip Pacheco doğru, bu gerçekten de kabul edilen cevap olmalı.
rjdamore

2

sadece ekle

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

1

Https://stackoverflow.com/a/41149866/1570834 adresinde @nirmals yanıtından 6.1.0.jre7 için bağımlılık eklerken sorun yaşıyorsanız commons-codec / azure-keyvault ile gitmeyi tercih ederim :

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

0

Çok zor değil. Henüz lisansı okumadım. Ancak bunun işe yaradığını kanıtladım. Sqljdbc4 jar dosyasını bir ağ paylaşımına veya yerel dizine kopyalayabilirsiniz. Build.gradle dosyanız şöyle görünmelidir:

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 dizini altında, \ sharedir \ releaseases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar olan maven yapısına benzer dizine sahibim

iyi şanslar.

David Yen


0

Kendi kendine yeten Maven projesi için genellikle tüm harici jar bağımlılıklarını projenin havuzuna yüklerim. SQL Server JDBC sürücüsü için şunları yapabilirsiniz:

  • JDBC sürücüsünü https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774 adresinden indirin
  • local-repoMaven projenizde klasör oluşturun
  • Geçici kopya sqljdbc42.jariçine local-repoklasörüne
  • içinde local-repoklasör vadede mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.yerel depoya dağıtma JAR (SCM içinde kodu ile birlikte depolanır)
  • sqljdbc42.jar ve indirilen dosyalar silinebilir
  • sizinkini değiştirin pom.xmlve projenin yerel deposuna referans ekleyin: 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> Artık projenizi herhangi bir ek yapılandırma veya kurulum olmadan her yerde çalıştırabilirsiniz.

0

Başka bir sürücü kullanabilirsiniz

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

ve xml olarak

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.