Brakujący artefakt com.microsoft.sqlserver: sqljdbc4: jar: 4.0

103

Próbuję dodać zależność sterownika MS SQL w moim pliku POM.xml, a poniżej jest zależność.

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

ale mam ten wyjątek

Brakujący artefakt com.microsoft.sqlserver: sqljdbc4: jar: 4.0

Naprawdę nie rozumiem problemu.

CodeNotFound
źródło

Odpowiedzi:

160

AKTUALIZACJA

Firma Microsoft udostępnia teraz ten artefakt w Maven Central. Więcej informacji można znaleźć w odpowiedzi @ nirmal: https://stackoverflow.com/a/41149866/1570834


ORYGINALNA ODPOWIEDŹ

Problem polega na tym, że Maven nie może znaleźć tego artefaktu w żadnym ze skonfigurowanych repozytoriów mavena .

Niestety firma Microsoft nie udostępnia tego artefaktu za pośrednictwem żadnego repozytorium Maven. Musisz pobrać plik jar z witryny firmy Microsoft , a następnie ręcznie zainstalować go w lokalnym repozytorium maven.

Możesz to zrobić za pomocą następującego polecenia maven:

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

Następnie następnym razem, gdy uruchomisz maven na swoim POM, znajdzie on artefakt.

DB5
źródło
dzięki za odpowiedź, ale dostaję to, kiedy uruchamiam polecenie[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
Upewnij się, że plik sqljdbc4.jar znajduje się w katalogu, w którym uruchamiasz polecenie, w przeciwnym razie podaj jawnie pełną ścieżkę.
Sergey Makarov
2
@Antony, jak mówi Sergey, musisz albo uruchomić komendę maven (jak podano w mojej odpowiedzi) z tej samej lokalizacji, do której pobrałeś plik sqljdbc4.jar, lub na przykład podać pełną ścieżkę do pliku -Dfile=C:\Users\anthony\Downloads\sqljdbc4.jar.
DB5,
po zainstalowaniu sqljdbc4.jar, jak powiedział @ DB5, nadal daje mi ten sam błąd, gdy uruchamiam pakiet mvn w moim projekcie, jakieś przemyślenia na ten temat? Gdzie faktycznie jest instalowany? czy mogę zobaczyć listę lokalnie zainstalowanych słoików z mvn?
P-RAD
5
zobacz moją odpowiedź poniżej, Microsoft (stan na listopad 2016) dodał ten sterownik jdbc do
Maven
73

Firma Microsoft niedawno otworzyła swój sterownik jdbc .

Możesz teraz znaleźć sterownik w 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>

lub dla 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>
nirmal
źródło
Próbowałem, aby to działało godzinami i okazało się, że wersja 7.4.1 nie ładuje sterownika, a wersja 7.0.0 nie. Czy wiesz, dlaczego tak się dzieje?
Archmede
28

Miałem podobny problem i rozwiązałem go, wykonując następujące czynności.

  • Pobierz plik sqljdbc4.jar z witryny firmy Microsoft na komputer lokalny.
  • Kliknij prawym przyciskiem myszy Projekt -> Importuj -> Maven -> Zainstaluj lub wdróż artefakt w repozytorium Maven, jak pokazano poniżej.

wprowadź opis obrazu tutaj

* Dalej -> Wypełnij następujące dane

Artifact file: ścieżkę słoika po pobraniu (Ex: E: \ lib \ sqljdbc4.jar w moim przypadku)
Group Id:com.microsoft.sqlserver
Artifact Id:sqljdbc4
Version:4.0

wprowadź opis obrazu tutaj

  • Następnie odśwież / wyczyść projekt.

    Dziękuję Ci!
programista
źródło
1
nadal otrzymuję ten problem
R.Anandan
1
Niesamowite!!! Ale musiałem odświeżyć projekt przez Projekt -> kliknięcie prawym przyciskiem myszy -> maven -> Aktualizuj projekt ...
Sanjeev Dhiman
11

Powyższa odpowiedź dodaje tylko plik sqljdbc4.jar do lokalnego repozytorium. W rezultacie, podczas tworzenia ostatecznego jar projektu do dystrybucji, sqljdbc4 ponownie będzie brakować, jak wskazał w komentarzu @Tony dotyczącym błędu wykonania.

Microsoft (oraz Oracle i inni dostawcy zewnętrzni) ograniczają dystrybucję swojego oprogramowania zgodnie z ENU / EULA. Dlatego te moduły oprogramowania nie są dodawane do słoików wyprodukowanych przez Maven do dystrybucji. Są sposoby na obejście tego problemu (na przykład podanie lokalizacji pliku jar innej firmy w czasie wykonywania), ale jako programista musisz uważać, aby nie naruszyć warunków licencji.

Lepszym podejściem do złączy / sterowników jdbc jest użycie jTDS , który jest kompatybilny z większością DBMS, bardziej niezawodny, szybszy (zgodnie z wzorcami) i rozpowszechniany na licencji GNU. Ułatwi ci to znacznie życie niż próba wbicia kwadratowego kołka w okrągły otwór zgodnie z którąkolwiek z powyższych technik.

Nelda.techspiress
źródło
oh man jtds uratował mi dzień, konfigurowanie sqljdbc4 z gradle jest trochę bolesne a * s
norbertas.gaulia
Tyle tylko, że jTDS nie obsługuje tej samej funkcjonalności co sterownik Microsoftu. Na przykład aktualizacja wsadowa.
lpacheco
1
Szkoda, że ​​jTDS nie obsługuje typu danych datetime2. wydaje mi się, że wybieram moją własną metodę datetime2-na-Java-Date lub przechodzenie przez wiele kółek, aby sterownik Microsoft mógł działać.
jkerak
Od 2017 roku sterownik nie został zaktualizowany do JDBC4 i jest prawie martwy, nie działa z HikariCP i bardziej nowoczesnymi pulami Conn.
Alfabravo
11

Możesz także utworzyć repozytorium projektu. Jest to przydatne, jeśli więcej programistów pracuje nad tym samym projektem, a biblioteka musi być uwzględniona w projekcie.

  • Najpierw utwórz strukturę repozytorium w katalogu lib projektu, a następnie skopiuj do niej bibliotekę. Biblioteka musi mieć następujący format nazwy:<artifactId>-<version>.jar

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

  • Utwórz plik pom obok pliku biblioteki i umieść w nim następujące informacje:

    <?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>
  • W tym momencie powinieneś mieć taką strukturę katalogów:

    <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

  • Przejdź do pliku pom swojego projektu i dodaj nowe repozytorium:

    <repositories>
        <repository>
            <id>Project repository</id>
            <url>file://${basedir}/lib</url>
        </repository>
    </repositories>
  • Na koniec dodaj zależność od biblioteki:

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

Aktualizacja 4.3.2017

Wygląda na to, że bibliotekę można pobrać z publicznie dostępnego repozytorium. @zobacz odpowiedzi nirmala i Jacka Grzelaczyka po więcej szczegółów.

Václav Kužel
źródło
To powinna być akceptowana odpowiedź, IMHO. Pomimo umieszczenia pliku binarnego w repozytorium git, jest to rozwiązanie typu „uruchom i zapomnij”. Nie ma potrzeby wykonywania dalszych instrukcji dotyczących wdrażania sterownika w każdym lokalnym repozytorium dewelopera (lub wyszukiwania pomocy w StackOverflow).
lpacheco
@Ipacheco jest poprawne, to rzeczywiście powinna być akceptowana odpowiedź.
rjdamore
2

poprostu dodaj

 <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
      <scope>runtime</scope>
 </dependency>
Jacek Grzelaczyk
źródło
1

Jeśli masz jakiś problem podczas dołączania zależności dla 6.1.0.jre7 z @nirmals, odpowiedz na https://stackoverflow.com/a/41149866/1570834 , w swoim pom z commons-codec / azure-keyvault Wolę iść z tym :

    <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc</artifactId>
       <version>6.2.2.jre7</version>                
    </dependency>
ROOP
źródło
0

Nie jest to zbyt trudne. Nie przeczytałem jeszcze licencji. Jednak udowodniłem, że to działa. Plik jar sqljdbc4 można skopiować do udziału sieciowego lub katalogu lokalnego. Twój build.gradle powinien wyglądać tak:

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

w katalogu sharedir / release mam katalog podobny do struktury maven, czyli \ sharedir \ release \ com \ microsoft \ sqlserver \ sqljdbc4 \ 4.0 \ sqljdbc4-4.0.jar

powodzenia.

David Yen

David Mobile
źródło
0

W przypadku projektu Maven zawierającego się samodzielnie zwykle instaluję wszystkie zależności zewnętrznych jar w repozytorium projektu. W przypadku sterownika JDBC programu SQL Server można:

  • pobierz sterownik JDBC z https://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
  • utwórz folder local-repow swoim projekcie Maven
  • tymczasowa kopia sqljdbc42.jardo local-repofolderu
  • w local-repofolderze uruchom, mvn deploy:deploy-file -Dfile=sqljdbc42.jar -DartifactId=sqljdbc42 -DgroupId=com.microsoft.sqlserver -DgeneratePom=true -Dpackaging=jar -Dversion=6.0.7507.100 -Durl=file://.aby wdrożyć plik JAR do lokalnego repozytorium (przechowywany wraz z kodem w SCM)
  • sqljdbc42.jar a pobrane pliki można usunąć
  • zmodyfikuj swój pom.xmli dodaj odniesienie do lokalnego repozytorium projektu: 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> teraz możesz uruchomić swój projekt w dowolnym miejscu bez żadnych dodatkowych konfiguracji lub instalacji.
Ramunas
źródło
0

Możesz użyć innego sterownika

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

i 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>
Jacek Grzelaczyk
źródło