2015-05-13 16 views
18

Mam zewnętrzny plik .jar, którego nie można zaimportować z publicznych repozytoriów przy użyciu pom.xml, to jest sqljdbc41.jar.Dodaj bibliotekę zewnętrzną .jar do Spring boot .jar internal/lib

Mogę uruchomić projekt lokalnie z mojego IDE i wszystko będzie działać. I odniesienia do biblioteki po pobraniu go tak:

<dependency> 
    <groupId>com.microsoft.sqlserver</groupId> 
    <artifactId>sqljdbc41</artifactId> 
    <version>4.1</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/sqljdbc41.jar</systemPath> 
</dependency> 

Kiedy biegnę mvn clean package utworzyć mój plik .jar i spróbuj uruchomić utworzoną .jar, błąd pojawi się, który wspomina odniesienia SQL Server nie są ważny. Następnie wyodrębniłem mój plik .jar i na tyle prawdziwe, że wszystko, co jest wymienione w pliku pom.xml, zostało poprawnie pobrane i dodane, jednak mój serwer SQL tego nie robi.

Mogę, w bardzo hackowy sposób * po prostu ręcznie dodać sqljdbc41.jar do folderu/lib po skompilowaniu go jako .jar, i zadziała, ale wydaje się wysoce nieoptymalny. Jakie byłoby lepsze podejście?


* Otwarcie pliku .jar z Winrar, przechodząc do folderu/lib, ręcznie wybierając mój plik sqljdbc41.jar, a następnie upewnij się, aby wybrać opcję bez kompresji dolny lewy gdzie Winrar daje opcje kompresji, w przypadku, gdy znaleźć to przez Google i nikt nie odpowiedział.

+1

Mam zwykle używany Nośnik artefakcyjny lub Sonatype do przechowywania artefaktu Microsoft. Ale wolę przełączyć się na JTDS: net.sourceforge.jtds: jtds: 1.3.1 (może być nowsza wersja). – Steve

+0

Widziałem jtd i uważałem, że był to nowy projekt, ale w tym momencie jest to całkowicie zbudowana aplikacja, więc przejście na JTDS jest nieopłacalne ze względu na ograniczenia czasowe. Zajmę się jednak Nos sztuczny/Sonatype. – Erick

Odpowiedz

22

można ustawić "includeSystemScope" na true.

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
    <includeSystemScope>true</includeSystemScope> 
    </configuration> 
</plugin> 
+2

to powinno być zaakceptowane odpowiedź – MeetJoeBlack

+0

Tak, to działało dla mnie. Wcześniej nie używałem true. Zmiana pojedynczego kodu kreskowego naprawiła mój problem. Dzięki Allen –

17

Można zainstalować sqljdbc41.jar w lokalnym repozytorium:

mvn install:install-file -Dfile=path/to/sqljdbc41.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar 

A potem deklarować zależność jako standardową zależność:

<dependency> 
    <groupId>com.microsoft.sqlserver</groupId> 
    <artifactId>sqljdbc41</artifactId> 
    <version>4.1</version> 
</dependency> 

Jeśli używasz zdalnego repozytorium artefaktów (nexus, archiva ...) musisz również wdrożyć artefakt w tym repozytorium. Można znaleźć więcej tutaj: https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

+0

To działa, i punkty bonusowe za dodanie informacji zdalnych, skonfigurowałem zdalne repo nexus.i wszystko teraz działa świetnie. Próbowałem również metody lokalnej i to też zadziałało. Dziękuję Ci bardzo. – Erick

+0

Dzięki za udostępnienie. – Buminda

+0

Tylko jeden punkt - możesz po prostu chcieć sprawdzić, co MS Licensing ma do powiedzenia na temat dystrybucji. NIE patrzyłem na siebie, ale stwardnienie rozsiane ma historię ... bycia trudnym. – demaniak

4

inny sposób, można umieścić go w folderze zasobów, takich jak zasoby/lib/xxx.jar, następnie config pom.xml tak:

<dependency> 
<groupId>com.microsoft.sqlserver</groupId> 
<artifactId>sqljdbc41</artifactId> 
<version>4.1</version> 
<scope>system</scope> 
<systemPath>${basedir}/src/main/resources/lib/sqljdbc41.jar</systemPath> 

2

w moim przypadku winą było zapewnienie numer wersji bez „kropka” w tagu:

 <dependency> 
     <groupId>jdk.tools</groupId> 
     <artifactId>jdk.tools</artifactId> 
     <scope>system</scope> 
     <version>1</version> 
     <systemPath>${basedir}/src/main/resources/lib/tools.jar</systemPath> 
    </dependency> 

Ten działa:

 <dependency> 
     <groupId>jdk.tools</groupId> 
     <artifactId>jdk.tools</artifactId> 
     <scope>system</scope> 
     <version>1.8</version> 
     <systemPath>${basedir}/src/main/resources/lib/tools.jar</systemPath> 
    </dependency> 
1

In Spring Boot: Ja również stanąłem w obliczu podobnego problemu i pomógł mi poniższy kod.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <version>1.5.7.RELEASE</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <includeSystemScope>true</includeSystemScope> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
Powiązane problemy