1. 概述
在本教程中,我們將學習如何將 Spring Boot 應用程序作為另一個項目的依賴項使用。
2. Spring Boot 打包
Spring Boot Maven 和 Gradle 插件都將我們的應用程序打包為可執行的 JAR 文件—— 這種文件不能被其他項目使用,因為類文件會被放入 BOOT-INF/classes 中。 這不是一個 bug,而是一個特性。
為了與另一個項目共享類,最佳方法是創建一個單獨的 JAR 文件,其中包含共享的類,然後將其作為所有依賴這些類的模塊的依賴項。
但是,如果這不可行,我們可以配置插件以生成一個單獨的 JAR 文件,該文件可作為依賴項使用。
2.1. Maven 配置
讓我們使用分類器配置插件:
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
雖然,Spring Boot 1.x 的配置方式會略有不同:
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>這將會創建兩個 JAR 包,一個帶有 exec 後綴的可執行 JAR 包,以及 另一個作為我們可以在其他項目中包含的典型 JAR 包。
3. 使用 Maven Assembly 插件打包
我們可以使用 maven-assembly-plugin 創建依賴 JAR 包:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>如果我們將此插件與 exec 分類器結合使用,並使用 spring-boot-maven-plugin,它將生成三個 JAR 包。前兩個 JAR 包與我們之前看到的相同。
第三個 JAR 包將包含我們在 <descriptorRef> 標籤中指定的任何後綴,並且將包含整個項目的傳遞依賴項。如果在另一個項目中包含它,就不需要單獨包含 Spring 依賴項。
4. 結論
在本文中,我們展示了兩種打包 Spring Boot 應用程序以作為依賴項用於其他 Maven 項目的方法。