Отсутствует артефакт 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

Я действительно не понимаю проблемы.

CodeNotFound
источник

Ответы:

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, он найдет артефакт.

DB5
источник
спасибо за ответ, но я получаю это, когда запускаю команду[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 в своем проекте, какие-либо мысли по этому поводу? Где он на самом деле устанавливается? я могу увидеть список локально установленных jar-файлов из 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 загружает. Вы знаете, почему это может быть так?
Archmede
28

У меня была аналогичная проблема, и я решил ее, выполнив следующие действия.

  • Загрузите 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 -> Обновить проект ...
Санджив
11

Приведенный выше ответ добавляет только sqljdbc4.jar в локальный репозиторий. В результате при создании финального файла jar проекта для распространения sqljdbc4 снова будет отсутствовать, как было указано в комментарии @Tony относительно ошибки времени выполнения.

Microsoft (а также Oracle и другие сторонние поставщики) ограничивают распространение своего программного обеспечения в соответствии с ENU / EULA. Поэтому эти программные модули не добавляются в jar-файлы, созданные Maven для распространения. Существуют приемы, позволяющие обойти это (например, указание местоположения стороннего jar-файла во время выполнения), но как разработчик вы должны быть осторожны с нарушением лицензирования.

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

Nelda.techspiress
источник
ой человек jtds спас мой день, настройка sqljdbc4 с Gradle некоторая боль A * S
norbertas.gaulia
Единственное, что jTDS не поддерживает ту же функциональность, что и драйвер Microsoft. Например, пакетное обновление.
lpacheco
1
К сожалению, jTDS не поддерживает тип данных datetime2. Кажется, мой выбор - свернуть мой собственный метод datetime2-to-java-date или пройти через множество обручей, заставляя драйвер microsoft работать.
jkerak
По состоянию на 2017 год драйвер не был обновлен до JDBC4 и практически мертв, не работает с HikariCP и более современными пулами подключений.
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

Похоже, что библиотеку можно получить из общедоступного репозитория. Подробнее см. ответы Нирмала и Яцека Гржелачика.

Вацлав Кужель
источник
Это должен быть принятый ответ, ИМХО. Несмотря на то, что бинарный файл помещен в репозиторий 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>
ROOP
источник
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 в репозиторий проекта. Для драйвера 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>
Яцек Гжелачик
источник