【问题标题】:Missing artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0缺少工件 com.microsoft.sqlserver:sqljdbc4:jar:4.0
【发布时间】:2013-11-01 11:25:27
【问题描述】:

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

我真的不明白这个问题。

【问题讨论】:

    标签: sql-server spring maven pom.xml


    【解决方案1】:

    更新

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


    原始答案

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

    不幸的是,Microsoft 并未通过任何 maven 存储库提供此工件。你需要从Microsoft website下载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 -&gt; [Help 1] 时我得到了这个
    • 确保 sqljdbc4.jar 位于您正在运行命令的目录中,否则明确提供完整路径。
    • @Antony,正如 Sergey 所说,您需要从将 sqljdbc4.jar 下载到的同一位置运行 maven 命令(如我的回答中给出的)或提供文件的完整路径以-Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar 为例。
    • 按照@DB5 所说安装sqljdbc4.jar 后,当我在我的项目中运行mvn package 时,它​​仍然给我同样的错误,对此有什么想法吗?它实际上安装在哪里?我可以从 mvn 中查看本地安装的 jar 列表吗?
    • 参见下面的my answer,微软(截至 2016 年 11 月)将此 jdbc 驱动程序添加到 maven Central
    【解决方案2】:

    微软最近open sourced their jdbc driver

    您现在可以在 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 版确实如此。你知道为什么会这样吗?
    【解决方案3】:

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

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



    * 下一步-->填写以下详细信息

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

    • 然后刷新/清理项目。

      谢谢!

    【讨论】:

    • 我仍然遇到这个问题
    • 太棒了!!!但我不得不通过 Project-->right click-->maven-->Update Project... 刷新项目
    【解决方案4】:

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

    • 首先,在项目的 lib 目录中创建一个存储库结构,然后将库复制到其中。库必须具有以下名称格式:&lt;artifactId&gt;-&lt;version&gt;.jar

      &lt;your_project_dir&gt;/lib/com/microsoft/sqlserver/&lt;artifactId&gt;/&lt;version&gt;/

    • 在库文件旁边创建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>
       
    • 此时,你应该有这样的目录结构:

      &lt;your_project_dir&gt;/lib/com/microsoft/sqlserver/sqljdbc4/4.2/sqljdbc4-4.2.jar &lt;your_project_dir&gt;/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 月 4 日更新

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

    【讨论】:

    • 这应该是公认的答案,恕我直言。尽管将二进制文件放入 git 存储库中,但它是一种“一劳永逸”的解决方案。无需进一步说明如何将驱动程序部署到每个开发人员本地存储库(或搜索 StackOverflow 寻求帮助)。
    • @Ipacheco 是正确的,这确实应该是公认的答案。
    【解决方案5】:

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

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

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

    【讨论】:

    • 哦,天哪,jtds 救了我的命,用 gradle 配置 sqljdbc4 有点痛苦 a*s
    • 唯一的问题是 jTDS 不支持与 Microsoft 驱动程序相同的功能。例如批量更新。
    • 很遗憾 jTDS 不支持 datetime2 数据类型。看来我的选择是推出我自己的 datetime2-to-java-date 方法,或者通过很多圈子让微软驱动程序工作。
    • 截至 2017 年,驱动程序尚未更新到 JDBC4 并且几乎已失效,不适用于 HikariCP 和更现代的连接池。
    【解决方案6】:

    添加

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

    【讨论】:

      【解决方案7】:

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

      • https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774下载JDBC驱动
      • 在您的 Maven 项目中创建文件夹 local-repo
      • 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> 现在您可以在任何地方运行您的项目,无需任何额外的配置或安装。

      【讨论】:

        【解决方案8】:

        如果您在包含来自 @nirmals 答案的 https://stackoverflow.com/a/41149866/1570834 中的 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>
        

        【讨论】:

          【解决方案9】:

          这并不难。我还没有阅读许可证。但是我已经证明这是可行的。您可以将 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

          祝你好运。

          大卫日元

          【讨论】:

            【解决方案10】:

            您可以使用其他驱动程序

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

            【讨论】:

              猜你喜欢
              • 2020-03-23
              • 2018-12-29
              • 2018-09-07
              • 2015-03-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多