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