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

时间:2013-10-23 09:03:52

标签: sql-server spring maven pom.xml

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

我真的不明白这个问题。

10 个答案:

答案 0 :(得分:149)

<强>更新

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时,它会找到神器。

答案 1 :(得分:55)

Microsoft最近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>

答案 2 :(得分:25)

我遇到了类似的问题并通过以下方式解决了这个问题。

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

enter image description here

*下一步 - &gt;填写以下详细信息

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

enter image description here

  • 然后刷新/清理项目。

    谢谢!

答案 3 :(得分:11)

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

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

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

答案 4 :(得分: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

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

答案 5 :(得分:2)

只需添加

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

答案 6 :(得分: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

祝你好运。

David Yen

答案 7 :(得分:0)

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

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

答案 8 :(得分: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>

答案 9 :(得分:0)

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

    <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc</artifactId>
       <version>6.2.2.jre7</version>                
    </dependency>