--Maven Shade Plugin est un plugin Maven qui combine des fichiers jar dépendants en un seul fichier jar. --Maven Shade Plugin récupère les fichiers jar dans le référentiel, mais n'inclut pas les fichiers jar spécifiés dans la portée du système (sur le système de fichiers local)
├── lib
│ └── my-lib-999.999.jar ← fichier jar qui n'existe que localement
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── example
│ └── App.java
└── resources
└── my-app.propriétés ← Fichier de ressources générales
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<name>my-app</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--Fichier jar local-->
<dependency>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>999.999</version>
<scope>system</scope>
<systemPath>${basedir}/lib/my-lib-999.999.jar</systemPath>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
<scope>compile</scope><!-- default scope -->
</dependency>
</dependencies>
<build>
<resources>
<!--Paramètres de ressource par défaut-->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
<!--Paramètre pour inclure le fichier jar de la portée système en tant que ressource-->
<resource>
<directory>${project.basedir}</directory>
<includes>
<include>lib/*.jar</include>
</includes>
</resource>
</resources>
<plugins>
<!--Introduction d'un plugin qui combine les fichiers jar dépendants en un seul fichier jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<!-- dependency-reduced-pom.Paramètres qui ne génèrent pas de XML-->
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Générez un fichier jar avec la commande mvn package. Un message d'avertissement s'affiche car un fichier jar est spécifié dans la portée du système, mais cette fois, il est ignoré.
$ mvn package
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.example:my-app:jar:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.example:my-lib:jar should not point at files within the project directory, ${basedir}/lib/my-lib-999.999.jar will be unresolvable by dependent projects @ line 27, column 19
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
Si vous vérifiez le contenu du fichier jar généré, il contient lib / my-lib-999.999.jar spécifié dans la portée du système. La bibliothèque spécifiée dans la portée de compilation par défaut est incluse après avoir été développée dans le fichier de classe, tandis que celle spécifiée dans la portée système est incluse en tant que fichier jar. Même si vous le saisissez sous forme de bocal, il sera chargé correctement lorsqu'il fonctionnera, il n'y a donc pas de problème.
$ jar -t -f target/my-app-1.0.jar
META-INF/
META-INF/MANIFEST.MF
lib/
lib/my-lib-999.999.jar
my-app.properties
com/
com/example/
com/example/App.class
META-INF/maven/
META-INF/maven/com.example/
META-INF/maven/com.example/my-app/
META-INF/maven/com.example/my-app/pom.xml
META-INF/maven/com.example/my-app/pom.properties
META-INF/LICENSE
META-INF/NOTICE
META-INF/maven/com.fasterxml.jackson.core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml
META-INF/services/
META-INF/services/com.fasterxml.jackson.core.JsonFactory
com/fasterxml/
com/fasterxml/jackson/
com/fasterxml/jackson/core/
com/fasterxml/jackson/core/Base64Variant.class
com/fasterxml/jackson/core/Base64Variants.class
com/fasterxml/jackson/core/FormatFeature.class
com/fasterxml/jackson/core/FormatSchema.class
(Ce qui suit est omis)
En tant qu'effet secondaire, le fichier original-my-app-1.0.jar, qui n'inclut normalement pas les fichiers jar dépendants, contient également des fichiers jar à l'échelle du système. Par conséquent, vous devez être prudent lorsque vous utilisez original- *. Jar.
$ jar -t -f target/original-my-app-1.0.jar
META-INF/
META-INF/MANIFEST.MF
lib/
com/
com/example/
lib/my-lib-999.999.jar
my-app.properties
com/example/App.class
META-INF/maven/
META-INF/maven/com.example/
META-INF/maven/com.example/my-app/
META-INF/maven/com.example/my-app/pom.xml
META-INF/maven/com.example/my-app/pom.properties
Maven – Introduction to the Dependency Mechanism
System Dependencies Important note: This is deprecated.
Recommended Posts