Отсутствует артефакт com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Я пытаюсь добавить зависимость драйвера 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

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

Ответ 1

ОБНОВИТЬ

Microsoft теперь предоставляет этот артефакт в центральном центре maven. См. Ответ @nirmal для получения дополнительной информации: fooobar.com/questions/51600/...


ОРИГИНАЛЬНЫЙ ОТВЕТ

Проблема в том, что 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, он найдет артефакт.

Ответ 2

Недавно Microsoft открыл исходный драйвер jdbc.

Теперь вы можете найти драйвер на центральной станции maven:

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

Ответ 3

У меня была аналогичная проблема, и я решил ее выполнить.

  • Загрузите файл sqljdbc4.jar с веб-сайта Microsoft на ваш локальный компьютер.
  • Щелкните правой кнопкой мыши Project → Import → Maven → Установите или разверните артефакт в репозиторий Maven, как показано ниже.

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

* Далее → Заполните следующие реквизиты

Artifact file:  путь загруженной банки (пример: E:\lib\sqljdbc4.jar в моем случае)
Group Id: com.microsoft.sqlserver
Artifact Id: sqljdbc4
Version: 4.0

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

  • Затем обновите/очистите проект.

    Спасибо!

Ответ 4

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

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

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

Ответ 5

Вы также можете создать репозиторий проекта. Это полезно, если другие разработчики работают над одним и тем же проектом, и библиотека должна быть включена в проект.

  • Сначала создайте структуру репозитория в каталоге проекта 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

Похоже, что библиотека может быть получена из общедоступного репозитория. @see nirmal и Jacek Grzelaczyk отвечают за более подробную информацию.

Ответ 6

просто добавьте

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

Ответ 7

Это не слишком сложно. Я еще не прочитал лицензию. Однако я доказал, что это работает. Вы можете скопировать файл 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/releases, у меня есть каталог, похожий на структуру maven, которая является\sharedir\релизы\com\microsoft\sqlserver\sqljdbc4\4.0\sqljdbc4-4.0.jar

удачи.

Дэвид Йен

Ответ 8

Для самостоятельного проекта 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> Теперь вы можете запускать проект везде без каких-либо дополнительных конфигураций или установок.

Ответ 9

Вы можете использовать другой драйвер

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

Ответ 10

Если у вас возникла какая-то проблема при включении зависимости для 6.1.0.jre7 из @nirmals, ответьте на fooobar.com/info/51600/..., в вашем помпе с commons-codec/azure-keyvault я предпочитаю идти с этим:

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