缺少工件com.microsoft.sqlserver:sqljdbc4:jar:4.0


103

我试图在我的POM.xml文件中添加MS SQL驱动程序依赖项,以下是该依赖项。

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

但我得到这个例外

缺少工件com.microsoft.sqlserver:sqljdbc4:jar:4.0

我真的不明白这个问题。

Answers:


160

更新

Microsoft现在在Maven Central中提供此工件。有关更多详细信息,请参见@nirmal的答案:https ://stackoverflow.com/a/41149866/1570834


原始答案

问题是Maven在任何已配置的Maven存储库中都找不到此工件。

不幸的是,Microsoft并未通过任何Maven存储库提供此工件。您需要从Microsoft网站下载jar ,然后将其手动安装到本地maven存储库中。

您可以使用以下maven命令执行此操作:

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

然后,下次在POM上运行maven时,它将找到工件。


感谢您的回答,但是我在运行命令时得到了这个[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 2013年

3
确保sqljdbc4.jar位于正在运行命令的目录中,否则请显式提供完整路径。
谢尔盖·马卡罗夫

2
正如Sergey所说,@ Antony,您需要从将sqljdbc4.jar下载到的同一位置运行maven命令(如我的回答所示),或提供文件的完整路径-Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar
DB5

按照@ DB5的说明安装sqljdbc4.jar后,在我的项目中运行mvn软件包时,它仍然给我同样的错误,对此有何想法?它实际上在哪里安装?我可以从mvn中查看本地安装的jar的列表吗?
P-RAD 2015年

5
请在下面查看我的答案,Microsoft(截至2016年11月)将此jdbc驱动程序添加到了maven
Central

73

微软最近开源了他们的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

我有类似的问题,并通过执行以下操作解决了。

  • 从Microsoft网站下载sqljdbc4.jar到本地计算机。
  • 右键单击Project-> Import-> Maven->将工件安装或部署到Maven存储库,如下所示。

在此处输入图片说明

*下一步->填写

Artifact file: 您下载的jar 的以下详细路径(例如:在我的情况下为E:\ lib \ sqljdbc4.jar)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

在此处输入图片说明

  • 然后刷新/清理项目。

    谢谢!

1
我仍然遇到这个问题
R.Anandan

1
太棒了!!! 但是我不得不通过Project刷新项目->右键单击-> maven->更新项目...
Sanjeev Dhiman

11

上面的答案仅将sqljdbc4.jar添加到本地存储库。结果,当创建最终的项目jar进行分发时,将再次缺少sqljdbc4,如@Tony在有关运行时错误的注释中所指出的。

Microsoft(以及Oracle和其他第三方提供商)根据ENU / EULA限制其软件的分发。因此,不会将这些软件模块添加到Maven生产的jar中进行分发。有一些解决方法(例如在运行时提供3rd party jar文件的位置),但是作为开发人员,您必须小心违反许可。

对于jdbc连接器/驱动程序,更好的方法是使用jTDS,它与大多数DBMS兼容,更可靠,更快(根据基准测试),并根据GNU许可进行分发。使用它比使用上面其他任何一种方法将方钉敲打到圆孔中要容易得多。


哦,老兄,jtds保存了我的一天,用gradle配置sqljdbc4有点麻烦
norbertas.gaulia 2015年

唯一的问题是jTDS不支持与Microsoft驱动程序相同的功能。例如,批量更新。
lpacheco

1
不幸的是,jTDS不支持datetime2数据类型。似乎我的选择是滚动我自己的datetime2-to-java-date方法,或者经历很多麻烦才能使Microsoft驱动程序正常工作。
jkerak

截至2017年,该驱动程序尚未更新至JDBC4,几乎已失效,无法与HikariCP和更现代的conn池一起使用。
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

图书馆似乎可以从公共资源库中获得。有关更多详细信息,请参见nirmal和Jacek Grzelaczyk的答案。


这应该是公认的答案,恕我直言。尽管将二进制文件放入git存储库中,但它是一种即发即弃的解决方案。无需进一步说明如何将驱动程序部署到每个开发人员本地存储库(或在StackOverflow上寻求帮助)。
lpacheco

@Ipacheco是正确的,这确实应该是公认的答案。
rjdamore

2

只需添加

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

1

如果您在从@nirmals包含对6.1.0.jre7的依赖项时遇到问题,请访问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>

0

不太难。我还没有阅读许可证。但是我已经证明了这种方法。您可以将sqljdbc4 jar文件复制到网络共享或本地目录。您的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 \ releases \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

祝好运。

颜大卫


0

对于自包含的Maven项目,我通常将所有外部jar依赖项安装到项目的存储库中。对于SQL Server JDBC驱动程序,您可以执行以下操作:

  • https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=11774下载JDBC驱动程序
  • local-repo在您的Maven项目中创建文件夹
  • 临时复制sqljdbc42.jarlocal-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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.