2015-05-13 22 views
18

Ho un file .jar esterno che non può essere importato da archivi pubblici usando pom.xml, è sqljdbc41.jar.Aggiungi libreria esterna .jar a Spring boot .jar internal/lib

Posso eseguire il progetto localmente dal mio IDE e tutto funzionerà. Ho fatto riferimento alla biblioteca dopo aver scaricato in questo modo:

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

Quando eseguo mvn clean package di creare il mio file .jar e tenta di eseguire il .jar creato, un errore pop-up, che cita i riferimenti di SQL Server non sono valido. Ho quindi estratto il mio file .jar e, a dire il vero, tutto ciò che viene referenziato nel file pom.xml viene scaricato correttamente e aggiunto, tuttavia, il mio SQL Server no.

Posso, in modo molto hacky * aggiungere manualmente il sqljdbc41.jar alla mia cartella/lib dopo che è stato compilato come .jar, e funzionerà, tuttavia sembra altamente non ottimale. Quale sarebbe un approccio migliore?


* L'apertura del file .jar con Winrar, andando nella cartella/lib, selezionare manualmente il mio file sqljdbc41.jar, quindi assicurarsi di selezionare l'opzione in basso a sinistra dove Nessuna compressione Winrar ti dà opzioni di compressione, nel caso in cui trova questo da Google e nessuno risponde.

+1

Ho cercato di utilizzare Artifactory o Sonatype Nexus per archiviare l'artefatto Microsoft. Ma la mia preferenza è passare a JTDS: net.sourceforge.jtds: jtds: 1.3.1 (potrebbe esserci una versione più recente). – Steve

+0

Ho visto jtds e considererei questo un nuovo progetto, ma è a questo punto un'applicazione completamente costruita, quindi passare a JTDS non è sostenibile a causa di vincoli di tempo. Vedrò comunque Artificial/Sonatype Nexus. – Erick

risposta

22

è possibile impostare 'includeSystemScope' su true.

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

questo dovrebbe essere accettato risposta – MeetJoeBlack

+0

Sì, questo ha funzionato per me. In precedenza non stavo usando true. La modifica del codice di una singola riga ha risolto il problema. Grazie Allen –

17

Si potrebbe installare lo sqljdbc41.jar nel repository locale:

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

e quindi dichiarare la dipendenza come una dipendenza di serie:

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

Se si utilizza un repository artefatto remota (nexus, archiva ...) è anche necessario distribuire l'artefatto su questo repository. È possibile trovare maggiori qui: https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

+0

Funziona, e punti bonus per aggiungere le informazioni remote, ho impostato un repository remoto nexus.e tutto funziona alla grande ora. Ho anche provato il metodo locale e anche quello ha funzionato. Grazie mille. – Erick

+0

Grazie per aver condiviso. – Buminda

+0

Solo un punto: si potrebbe semplicemente voler controllare ciò che la licenza MS ha da dire sulla distribuzione. NON ho guardato me stesso, ma la SM ha una storia di ... essere difficile. – demaniak

4

un altro modo, si può mettere nella cartella risorse, quali le risorse/lib/xxx.jar, quindi config il pom.xml in questo modo:

<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

nel mio caso, la colpa era fornendo un numero di versione senza "dot" in tag:

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

questo funziona:

 <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: ho anche affrontato un problema simile e sotto il codice mi ha aiutato.

<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> 
Problemi correlati