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

SAR*_*SAR 101 sql-server spring pom.xml maven

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

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但我得到了这个例外

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

我真的不明白这个问题.

DB5*_*DB5 156

UPDATE

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
Run Code Online (Sandbox Code Playgroud)

然后,下次在POM上运行maven时,它会找到该工件.

  • 请参阅下面的[我的回答](http://stackoverflow.com/a/41149866/306538),microsoft(截至2016年11月)将此jdbc驱动程序添加到maven central (5认同)
  • 确保sqljdbc4.jar位于运行命令的目录中,否则显式提供完整路径. (3认同)
  • @Antony,正如谢尔盖所​​说,你需要从你下载sqljdbc4.jar的同一个位置运行maven命令(如我的答案所示)或提供文件的完整路径`-Dfile = C:\ Users\anthony\Downloads\sqljdbc4.jar`例如. (2认同)

nir*_*mal 67

微软最近开源了他们的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>
Run Code Online (Sandbox Code Playgroud)

或者对于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>
Run Code Online (Sandbox Code Playgroud)


pro*_*mer 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

在此输入图像描述

  • 然后刷新/清理项目.

    谢谢!


Nel*_*ess 11

以上答案仅将sqljdbc4.jar添加到本地存储库.因此,在创建用于分发的最终项目jar时,sqljdbc4将再次丢失,如@Tony关于运行时错误的注释所示.

Microsoft(以及Oracle和其他第三方提供商)根据ENU/EULA限制其软件的分发.因此,这些软件模块不会被添加到Maven生产的罐子中进行分发.有一些黑客可以绕过它(例如在运行时提供第三方jar文件的位置),但作为开发人员,您必须小心违反许可.

jdbc连接器/驱动程序的一个更好的方法是使用jTDS,它与大多数DBMS兼容,更可靠,更快(根据基准),并在GNU许可下分发.它将使你的生活更容易使用,而不是尝试按照上述任何其他技术将方形钉钉入圆孔.


Vác*_*žel 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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 此时,您应该具有以下目录结构:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,添加对库的依赖:

    <dependencies>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.2</version>
        </dependency>
    </dependencies>
    
    Run Code Online (Sandbox Code Playgroud)

更新4.3.2017

似乎可以从公共可用的存储库中获取该库.@see nirmal's和Jacek Grzelaczyk的答案了解更多细节.