Thiếu cấu phần phần mềm com.microsoft.sqlserver: sqljdbc4: jar: 4.0


103

Tôi đang cố gắng thêm phần phụ thuộc trình điều khiển MS SQL trong tệp POM.xml của mình và sau đây là phần phụ thuộc.

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

nhưng tôi nhận được ngoại lệ này

Thiếu cấu phần phần mềm com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Tôi thực sự không hiểu vấn đề.

Câu trả lời:


160

CẬP NHẬT

Microsoft hiện cung cấp tạo tác này ở trung tâm maven. Xem câu trả lời của @ nirmal để biết thêm chi tiết: https://stackoverflow.com/a/41149866/1570834


CÂU TRẢ LỜI GỐC

Vấn đề là Maven không thể tìm thấy phần mềm này trong bất kỳ kho lưu trữ maven nào đã định cấu hình .

Thật không may, Microsoft không cung cấp tạo tác này thông qua bất kỳ kho lưu trữ maven nào. Bạn cần tải xuống jar từ trang web của Microsoft , sau đó cài đặt thủ công nó vào kho lưu trữ maven cục bộ của bạn.

Bạn có thể thực hiện việc này bằng lệnh maven sau:

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

Sau đó, lần sau khi bạn chạy maven trên POM của mình, nó sẽ tìm thấy hiện vật.


cảm ơn vì câu trả lời nhưng tôi nhận được điều này khi tôi chạy lệnh[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 -> [Help 1]
CodeNotFound

3
Đảm bảo sqljdbc4.jar là các vị trí trong thư mục bạn đang chạy lệnh, nếu không hãy cung cấp đường dẫn đầy đủ một cách rõ ràng.
Sergey Makarov

2
@Antony, như Sergey nói, bạn cần phải chạy lệnh maven (như được đưa ra trong câu trả lời của tôi) từ cùng một vị trí mà bạn đã tải xuống sqljdbc4.jar hoặc cung cấp đường dẫn đầy đủ đến tệp -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar.
DB5

Sau khi cài đặt sqljdbc4.jar như @ DB5 đã nói, Nó vẫn cho tôi lỗi tương tự khi tôi chạy gói mvn trong dự án của mình, bạn có suy nghĩ gì về điều đó không? Nó thực sự được cài đặt ở đâu? Tôi có thể xem danh sách các lọ được cài đặt cục bộ từ mvn không?
P-RAD

5
xem câu trả lời của tôi bên dưới, microsoft (kể từ tháng 11 năm 2016) đã thêm trình điều khiển jdbc này vào maven
center

73

Microsoft gần đây đã mở nguồn trình điều khiển jdbc của họ .

Bây giờ bạn có thể tìm thấy trình điều khiển trên trung tâm maven:

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

hoặc cho 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>

Tôi đã cố gắng làm cho điều này hoạt động trong nhiều giờ và phát hiện ra rằng phiên bản 7.4.1 không tải trình điều khiển cho tôi bằng phiên bản 7.0.0. Bạn có biết tại sao lại như vậy không?
Archmede

27

Tôi đã gặp vấn đề tương tự và đã giải quyết nó bằng cách làm theo.

  • Tải xuống sqljdbc4.jar từ trang web của Microsoft vào máy cục bộ của bạn.
  • Nhấp chuột phải vào Dự án -> Nhập -> Maven -> Cài đặt hoặc triển khai một tạo tác vào kho lưu trữ Maven như hình dưới đây.

nhập mô tả hình ảnh ở đây

* Tiếp theo -> Điền vào

Artifact file: đường dẫn chi tiết sau của jar bạn đã tải xuống (Ví dụ: E: \ lib \ sqljdbc4.jar trong trường hợp của tôi)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

nhập mô tả hình ảnh ở đây

  • Sau đó Làm mới / làm sạch dự án.

    Cảm ơn bạn!

1
vẫn tôi đang nhận được vấn đề này
R.Anandan

1
Tuyệt vời!!! Nhưng tôi phải làm mới dự án thông qua dự án -> click chuột phải -> maven -> Dự án Cập nhật ...
Sanjeev Dhiman

11

Câu trả lời ở trên chỉ thêm sqljdbc4.jar vào kho lưu trữ cục bộ . Do đó, khi tạo jar dự án cuối cùng để phân phối, sqljdbc4 sẽ lại bị thiếu như đã được chỉ ra trong nhận xét của @Tony về lỗi thời gian chạy.

Microsoft (và Oracle và các nhà cung cấp bên thứ ba khác) hạn chế việc phân phối phần mềm của họ theo ENU / EULA. Do đó, các mô-đun phần mềm đó không được thêm vào trong các lọ do Maven sản xuất để phân phối. Có những thủ thuật để xử lý nó (chẳng hạn như cung cấp vị trí của tệp jar của bên thứ 3 trong thời gian chạy), nhưng với tư cách là nhà phát triển, bạn phải cẩn thận về việc vi phạm giấy phép.

Một cách tiếp cận tốt hơn cho trình kết nối / trình điều khiển jdbc là sử dụng jTDS , tương thích với hầu hết các DBMS, đáng tin cậy hơn, nhanh hơn (theo điểm chuẩn) và được phân phối theo giấy phép GNU. Nó sẽ giúp cuộc sống của bạn dễ dàng hơn nhiều so với việc cố gắng đập chốt vuông vào lỗ tròn theo bất kỳ kỹ thuật nào khác ở trên.


ôi người đàn ông jtds đã cứu ngày của tôi, định cấu hình sqljdbc4 với gradle là một số khó khăn a * s
norbertas.gaulia

Chỉ có điều là jTDS không hỗ trợ chức năng tương tự như trình điều khiển của Microsoft. Ví dụ: cập nhật hàng loạt.
lpacheco

1
thật không may là jTDS không hỗ trợ kiểu dữ liệu datetime2. Có vẻ như lựa chọn của tôi là sử dụng phương thức datetime2-to-java-date của riêng tôi hoặc trải qua rất nhiều vòng để trình điều khiển microsoft hoạt động.
jkerak

Tính đến năm 2017, trình điều khiển chưa được cập nhật lên JDBC4 và đã chết khá nhiều, không hoạt động với HikariCP và các hồ bơi conn hiện đại hơn.
Alfabravo

11

Bạn cũng có thể tạo một kho lưu trữ dự án. Nó hữu ích nếu nhiều nhà phát triển đang làm việc trên cùng một dự án và thư viện phải được đưa vào dự án.

  • Đầu tiên, tạo một cấu trúc kho lưu trữ trong thư mục lib của dự án của bạn, sau đó sao chép thư viện vào đó. Thư viện phải có định dạng tên sau:<artifactId>-<version>.jar

    <your_project_dir>/lib/com/microsoft/sqlserver/<artifactId>/<version>/

  • Tạo tệp pom bên cạnh tệp thư viện và đưa thông tin sau vào đó:

    <?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>
  • Tại thời điểm này, bạn sẽ có cấu trúc thư mục này:

    <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

  • Đi tới tệp pom của dự án của bạn và thêm kho lưu trữ mới:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Cuối cùng, thêm một phụ thuộc vào thư viện:

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

Cập nhật 4.3.2017

Có vẻ như thư viện có thể được lấy từ kho lưu trữ công khai. Câu trả lời của @see nirmal's và Jacek Grzelaczyk để biết thêm chi tiết.


Đây phải là câu trả lời được chấp nhận, IMHO. Mặc dù đặt một tệp nhị phân vào kho lưu trữ git, nhưng đó là một giải pháp chữa cháy và quên. Không cần hướng dẫn thêm về cách triển khai trình điều khiển cho từng kho lưu trữ cục bộ của nhà phát triển (hoặc tìm kiếm StackOverflow để được trợ giúp).
lpacheco

@Ipacheco đúng, đây thực sự phải là câu trả lời được chấp nhận.
rjdamore,

2

chỉ cần thêm

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

1

Nếu bạn đang gặp một số vấn đề khi bao gồm sự phụ thuộc cho 6.1.0.jre7 từ @nirmals, câu trả lời trong https://stackoverflow.com/a/41149866/1570834 , trong pom của bạn có commons-codec / azure-keyvault, tôi thích làm với điều này hơn :

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

0

Nó không quá khó. Tôi vẫn chưa đọc giấy phép. Tuy nhiên tôi đã chứng minh điều này hoạt động. Bạn có thể sao chép tệp jar sqljdbc4 vào chia sẻ mạng hoặc thư mục cục bộ. Build.gradle của bạn sẽ trông như thế này:

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

trong thư mục sharedir / release, tôi có thư mục tương tự như cấu trúc maven là \ sharedir \ Release \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

chúc may mắn.

David Yen


0

Đối với dự án Maven tự chứa, tôi thường cài đặt tất cả các phụ thuộc jar bên ngoài vào kho lưu trữ của dự án. Đối với trình điều khiển JDBC của SQL Server, bạn có thể thực hiện:

  • tải xuống trình điều khiển JDBC từ https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • tạo thư mục local-repotrong dự án Maven của bạn
  • sao chép tạm thời sqljdbc42.jarvào local-repothư mục
  • trong local-repothư mục chạy mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.để triển khai JAR vào kho lưu trữ cục bộ (được lưu trữ cùng với mã của bạn trong SCM)
  • sqljdbc42.jar và các tệp đã tải xuống có thể bị xóa
  • sửa đổi của bạn pom.xmlvà thêm tham chiếu vào kho lưu trữ cục bộ của dự án: 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> Bây giờ bạn có thể chạy dự án của mình ở mọi nơi mà không cần bất kỳ cấu hình hoặc cài đặt bổ sung nào.

0

Bạn có thể sử dụng trình điều khiển khác

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

và trong 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.