Відсутній артефакт 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. Вам потрібно завантажити банку з веб-сайту 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 є місцями в каталозі, в якому ви виконуєте команду, інакше явно надайте повний шлях.
Сергій Макаров

2
@Antony, як каже Сергій, вам потрібно або запустити команду 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

Нещодавно компанія Microsoft відкрила свій драйвер 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. Чи знаєте ви, чому це може бути так?
Архімед

27

У мене була подібна проблема, і я вирішив її, виконуючи наступні дії.

  • Завантажте sqljdbc4.jar з веб-сайту Microsoft на свою локальну машину.
  • Клацніть правою кнопкою миші на Project -> Import -> Maven -> Установіть або розгорніть артефакт до сховища Maven, як показано нижче.

введіть тут опис зображення

* Далі -> Заповніть наступні дані

Artifact file: шлях глечика ви завантажили (Приклад: E: \ Lib \ sqljdbc4.jar в моєму випадку)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4,0

введіть тут опис зображення

  • Потім оновіть / очистіть проект.

    Дякую!

1
все ще я отримую це питання
Р.Анандан

1
Дивовижно !!! Але мені довелося оновити проект через Project -> клацнути правою кнопкою миші -> maven -> Оновити проект ...
Sanjeev Dhiman

11

Наведена відповідь лише додає sqljdbc4.jar до локального сховища. Як результат, при створенні остаточного склянки проекту для розповсюдження sqljdbc4 знову буде відсутній, як зазначено в коментарі @Tony щодо помилки виконання.

Microsoft (і Oracle та інші постачальники третіх сторін) обмежують розповсюдження свого програмного забезпечення відповідно до ENU / EULA. Тому ці програмні модулі не додаються в банки, що випускаються Maven для розповсюдження. Існують хаки, щоб їх обійти (наприклад, вказати розташування стороннього файлу jar під час виконання), але як розробник, ви повинні бути обережними щодо порушення ліцензування.

Кращим підходом до jdbc-роз'ємів / драйверів є використання jTDS , сумісного з більшістю СУБД, більш надійним, швидшим (за показниками) та розповсюдженим за ліцензією GNU. Це зробить ваше життя набагато простіше використовувати це, ніж намагатися забити квадратний кілочок у круглий отвір, виконуючи будь-яку з інших вище прийомів.


О, людина, jtds врятувала мені день, конфігуруючи sqljdbc4 з gradle, це якийсь біль a * s
norbertas.gaulia,

Єдине, що jTDS не підтримує таку ж функціональність, як драйвер Microsoft. Наприклад, пакетне оновлення.
lpacheco

1
прикро, що jTDS не підтримує тип даних datetime2. Здається, моїм рішенням є прокрутка мого власного методу datetime2-to-java-date або проходження безлічі обручів, щоб заставити драйвер microsoft працювати.
jkerak

Станом на 2017 рік, драйвер не оновлювався до JDBC4 і він майже мертвий, не працює з HikariCP та більш сучасними басами conn.
Альфабраво

11

Ви також можете створити сховище проектів. Це корисно, якщо над одним проектом працює більше розробників, і бібліотека повинна бути включена в проект.

  • Спочатку створіть структуру сховища в каталозі файлів ваших проектів, а потім скопіюйте в нього бібліотеку. Бібліотека повинна мати такий формат імен:<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

  • Перейдіть до пом-файлу вашого проекту та додайте нове сховище:

    <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

Схоже, бібліотеку можна отримати з загальнодоступного сховища. Щоб дізнатись більше, дізнайтеся відповіді нірмалів та Яцека Гжелячика.


Це має бути прийнята відповідь, ІМХО. Незважаючи на введення бінарного файлу в сховище 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 , у вашій пам’яті з commons-codec / azure-keyvault, я вважаю за краще піти з цим :

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

0

Це не надто важко. Ліцензію я ще не читав. Однак я це підтвердив. Ви можете скопіювати файл jarlj 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 в сховище проекту. Для драйвера JDBC SQL Server ви можете:

  • завантажити драйвер 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.