为SQL Server设置Maven依赖项


122

我正在开发一个Portlet,可以在其中对SQL Server数据库进行Hibernate访问。我为此设置了maven依赖项,并尝试以与MySql相同的方式找出SQL Server连接器。

如果我搜索SQL Server连接器,我的Google搜索仍然仅提供Mysql。正确的Maven依赖值是多少?


Answers:


213

从Olaf提供的链接下载驱动程序JAR,并将其添加到本地Maven存储库中;

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

然后将其添加到您的项目中;

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

13
从Olaf的回答状态链接的版本的发行说明是“用于SQL Server的Microsoft JDBC驱动程序4.0”。所以我会在mvn安装中使用“ -Dversion = 4.0”。
乔治·阿姆霍尔德

2
我遇到了一个问题:该解决方案可以在这里找到“在这个目录中没有POM”:stackoverflow.com/questions/16348459/...
阿伦B.迪

4
sourceforge jtds是您的答案
Junjun Liu


将其下载并添加到本地Maven存储库中是否不会导致与要在其上构建应用程序的开发机器紧密耦合?我的意思是,如果试图将同一项目构建在另一台计算机上,则它将在本地存储库中找不到该jar。将其添加到项目中以便在VCS上可用不是很好吗?
Obaid Maroof

69

回答“新的”和“酷的”微软。

是的,SQL Server驱动程序现在已获得MIT许可证

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>

对于“旧” Microsoft的答案:

对于我的用例(集成测试),将系统范围用于JDBC驱动程序的依赖项就足够了,例如:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>3.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/sqljdbc4.jar</systemPath>
    <optional>true</optional>
</dependency>

这样,我可以将JDBC驱动程序放入本地版本控制中。无需让每个开发人员在自己的存储库中手动设置内容。

我从这个答案中汲取了另一个堆栈溢出问题的灵感,我也在这里发表了博客


如果可以的话,我认为最好将JAR上传到本地Maven存储库(Nexus)
mcoolive

@mcoolive:绝对是更好的选择。但是有时候,做一个快速而又肮脏的工作只是比较容易(而且仍然合适)。
卢卡斯·埃德

与Touzery的最新答案相比,此答案已过时。
祝福极客

1
@BlessedGeek:好吧,甚至在Touzery之前我都更新了答案。实际上,Touzery的答案已经过时了,因为它仍然引用sourceforge中的库。sourceforge
卢卡斯·埃德

1
@MikhailFedorov:我的解决方案对我有用。随意添加自己的答案(甚至一个问题/答案对)以显示如何解决此问题,这对于社区来说非常有用。
卢卡斯·埃德

16

还有一种选择:您可以使用MS-SQL Server的开源jTDS驱动程序,该驱动程序是兼容的,尽管不是由Microsoft制造的。对于该驱动程序,您可以使用一个Maven工件:

http://jtds.sourceforge.net/

来自http://mvnrepository.com/artifact/net.sourceforge.jtds/jtds

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.3.1</version>
</dependency>

更新 2016年11月,Microsoft现在在github上发布了其MSSQL JDBC驱动程序并且现在也可以在maven中使用:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>

对于Java 1.6:我猜是1.7的更高版本。依赖>
Roshan Khandelwal 2014年

2
请注意,自2013年以来没有发布JTDS,所以今天可能是个坏建议……
Emmanuel Touzery

jtds驱动程序在Java 8中存在ssl问题(已修补但未发布),因此我们切换到sqljdbc4
rychu


3

请小心上面的答案。sqljdbc4.jar不在公共许可证下提供,这就是为什么很难将其包含在jar中以进行运行时和分发的原因。请参阅下面的答案,以获取更多详细信息和更好的解决方案。一旦我找到了这个答案,您的生活将变得比我的容易得多。

https://stackoverflow.com/a/30111956/3368958


2

即使在安装了sqlserver jar之后,我的maven仍试图从maven存储库中获取Dependecy。然后,我为pom提供了本地计算机的存储库,在此之后它可以正常工作……可能会对某人有所帮助。

    <repository>
        <id>local</id>
        <name>local</name>
        <url>file://C:/Users/mywindows/.m2/repository</url>
    </repository>


1

看起来微软已经发布了一些他们的驱动程序到Maven Central:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>
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.