108

我正在尝试在我的 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

我真的不明白这个问题。

4

10 回答 10

165

更新

微软现在在 maven Central 中提供了这个工件。有关更多详细信息,请参阅@nirmal 的答案:https ://stackoverflow.com/a/41149866/1570834


原始答案

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

不幸的是,微软没有通过任何 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 时,它会找到工件。

于 2013-10-23T09:22:53.990 回答
79

微软最近开源了他们的 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>
于 2016-12-14T18:43:08.877 回答
30

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

  • 从 Microsoft 网站将 sqljdbc4.jar 下载到本地计算机。
  • 右键单击 Project-->Import-->Maven-->Install or deploy an artifact to a Maven repository,如下所示。

在此处输入图像描述

* Next-->填写您下载的jar的以下详细信息

Artifact file: 路径(例如:E:\ lib \ sqljdbc4.jar在我的例子中)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

在此处输入图像描述

  • 然后刷新/清理项目。

    谢谢!
于 2015-09-24T11:27:37.263 回答
12

您还可以创建项目存储库。如果更多的开发人员在同一个项目上工作,这很有用,并且该库必须包含在项目中。

  • 首先,在项目的 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>
     

2017-03-04 更新

似乎该库可以从公开可用的存储库中获得。@see nirmal 和 Jacek Grzelaczyk 的答案了解更多详情。

2020-11-04 更新

目前 Maven 有一个方便的目标install,它允许您将现有包部署到项目/文件存储库中,而无需手动创建 POM 文件。它将为您生成这些文件。

mvn install:install-file \
    -Dfile=sqljdbc4.jar \
    -DgroupId=com.microsoft.sqlserver \
    -DartifactId=sqljdbc4 \
    -Dversion=4.2 \
    -Dpackaging=jar \
    -DlocalRepositoryPath=${your_project_dir}/lib
于 2016-03-10T11:09:02.497 回答
11

上面的答案只是将 sqljdbc4.jar 添加到本地存储库中。因此,在创建最终项目 jar 以进行分发时,sqljdbc4 将再次丢失,正如@Tony 关于运行时错误的评论中所指出的那样。

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

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

于 2015-05-07T21:26:32.957 回答
2

只需添加

 <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
      <scope>runtime</scope>
 </dependency>
于 2016-11-16T10:49:56.290 回答
1

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

  • 从https://www.microsoft.com/en-us/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> 现在您可以在任何地方运行您的项目,而无需任何额外的配置或安装。
于 2016-09-08T13:11:47.903 回答
1

如果在https://stackoverflow.com/a/41149866/1570834中的 @nirmals 答案中包含 6.1.0.jre7 的依赖项时遇到问题,请在您的 pom 中使用 commons-codec/azure-keyvault 我更喜欢使用这个:

    <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc</artifactId>
       <version>6.2.2.jre7</version>                
    </dependency>
于 2018-06-28T14:45:22.490 回答
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

祝你好运。

大卫日元

于 2015-06-30T17:53:51.517 回答
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>
于 2016-11-24T18:44:20.590 回答