web-dev-qa-db-fra.com

Ajouter une bibliothèque externe .jar à Spring Boot .jar internal / lib

J'ai un fichier .jar externe qui ne peut pas être importé à partir de référentiels publics à l'aide de pom.xml, il s'agit de sqljdbc41.jar.

Je peux exécuter le projet localement à partir de mon IDE et tout fonctionnera. J'ai référencé la bibliothèque après l'avoir téléchargée comme ceci:

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

Quand je cours mvn clean package pour créer mon fichier .jar et essayer d’exécuter le .jar créé, une erreur s’affiche, indiquant que les références SQL Server ne sont pas valides. J'ai ensuite extrait mon fichier .jar et, en vérité, tout ce qui est référencé dans le pom.xml le fichier est correctement téléchargé et ajouté, mais pas SQL Server.

Je peux, d’une manière très sournoise * ajouter simplement le sqljdbc41.jar dans mon dossier/lib après sa compilation en tant que .jar, et cela fonctionnera, mais cela semble hautement non optimal. Quelle serait une meilleure approche?


* Ouvrir le fichier .jar avec Winrar, aller dans le dossier/lib, sélectionner manuellement mon sqljdbc41.jar, puis assurez-vous de sélectionner l'option Pas de compression en bas à gauche, où Winrar vous donne des options de compression, au cas où Google le trouverait et que personne ne réponde.

40
Erick

vous pouvez définir 'includeSystemScope' sur true.

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

Vous pouvez installer le fichier sqljdbc41.jar dans votre référentiel local:

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

Et déclarez ensuite la dépendance en tant que dépendance standard:

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

Si vous utilisez un référentiel d'artefacts distant (Nexus, Archiva ...), vous devez également déployer l'artefact sur ce référentiel. Vous pouvez trouver plus ici: https://maven.Apache.org/guides/mini/guide-3rd-party-jars-remote.html

21
Melou

autrement, vous pouvez le placer dans le dossier des ressources, tel que resources/lib/xxx.jar, puis configurer le pom.xml comme ceci:

<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>
9
Clement.Xu

Dans mon cas, la faute fournissait un numéro de version sans "point" dans la balise:

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

Celui-ci fonctionne:

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

Dans Spring Boot: J'ai également rencontré un problème similaire et le code ci-dessous m'a aidé.

<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>
1
Ashu Phaugat

Ça marche pour moi:

project {root folder}/libs/ojdbc-11.2.0.3.jar

pom.xml:

<dependency>
    <groupId>com.Oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>11.2.0.3</version>
    <scope>system</scope>
    <systemPath>${basedir}/libs/ojdbc-11.2.0.3.jar</systemPath>
</dependency>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>
0
yuxiaobin