Отсутствует артефакт 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
Я действительно не понимаю проблему.
11 ответов
ОБНОВИТЬ
Microsoft now provide this artifact in maven central. See @nirmal's answer for further details: /questions/42159635/otsutstvuet-artefakt-commicrosoftsqlserversqljdbc4jar40/42159652#42159652
ОРИГИНАЛЬНЫЙ ОТВЕТ
The issue is that Maven can't find this artifact in any of the configured maven repositories.
К сожалению, Microsoft не делает этот артефакт доступным через любой репозиторий Maven. You need to download the jar from the Microsoft website, and then manually install it into your local maven repository.
You can do this with the following maven command:
mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
Then next time you run maven on your POM it will find the artifact.
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>
У меня была похожая проблема, и я решил ее следующим образом.
- Загрузите файл sqljdbc4.jar с веб-сайта Microsoft на локальный компьютер.
- Щелкните правой кнопкой мыши Project ->Import->Maven-> Установить или развернуть артефакт в репозитории Maven, как показано ниже.
* Далее -> Заполните следующие данныеArtifact file:
путь к банке, которую вы скачали (например, E:\lib\sqljdbc4.jar в моем случае) Group Id:
com.microsoft.sqlserverArtifact Id:
sqljdbc4Version:
4,0
- Затем обновите / очистите проект.
Спасибо!
Вы также можете создать репозиторий проекта. Это полезно, если над одним проектом работает больше разработчиков, и библиотека должна быть включена в проект.
Сначала создайте структуру репозитория в каталоге 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
Похоже, что библиотека может быть получена из общедоступного хранилища. @ См. ответы Нирмаля и Яцека Гржелачика для более подробной информации.
Приведенный выше ответ только добавляет sqljdbc4.jar в локальный репозиторий. В результате, при создании окончательного проекта JAR для распространения, sqljdbc4 снова будет отсутствовать, как было указано в комментарии @Tony относительно ошибки времени выполнения.
Microsoft (и Oracle, и другие сторонние поставщики) ограничивают распространение своего программного обеспечения в соответствии с ENU/EULA. Поэтому эти программные модули не добавляются в выпущенные Maven банки для распространения. Есть обходные пути (например, указание местоположения стороннего jar-файла во время выполнения), но как разработчик вы должны быть осторожны с нарушением лицензирования.
Лучшим подходом для коннекторов / драйверов jdbc является использование jTDS, которая совместима с большинством СУБД, более надежна, быстрее (согласно тестам) и распространяется под лицензией GNU. Это сделает вашу жизнь намного проще, чем пытаться втиснуть квадратный колышек в круглое отверстие, следуя любой другой методике, описанной выше.
Просто добавь
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<scope>runtime</scope>
</dependency>
Для самодостаточного проекта 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>
Теперь вы можете запустить свой проект везде без каких-либо дополнительных настроек или установок.
Если у вас возникли проблемы при включении зависимости для 6.1.0.jre7 от ответа @nirmals в /questions/42159635/otsutstvuet-artefakt-commicrosoftsqlserversqljdbc4jar40/42159652#42159652, в вашем pom с помощью commons-codec/ azure-keyvault я предпочитаю идти с этим:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.2.jre7</version>
</dependency>
Это не так уж сложно. Я еще не читал лицензию. Однако я доказал, что это работает. Вы можете скопировать файл 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 / updates у меня есть каталог, похожий на структуру maven, который является \ sharedir \ Release \ Com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar
удачи.
Дэвид Йен
The com.microsoft.sqlserver
package на Maven теперь имеет только версию 6.0 как самую низкую версию JDBC. Так что вам нужно попробовать другойgroupId
Maven с JDBC версии 4.0.
Я рекомендую это; меня устраивает. Я использую SQL Server 2012 и Java 8.
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
И файл свойств конфигурации, например:
jdbc.driverClassName = net.sourceforge.jtds.jdbc.Driver
jdbc.url = jdbc:jtds:sqlserver://localhost:1433;databasename=YourDB;encrypt=true;trustserverCertificate=true
Вы можете использовать другой драйвер
<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>