Spring Boot 为 Maven 和 Gradle 提供了构建工具插件。插件提供了各种特性,包括可执行 jar 的封装。本节提供了两个插件的更多细节,以及扩展一个不受支持的构建系统所需的一些帮助。如果你刚刚开始,可能希望首先阅读 “章节 III, “使用 Spring Boot”” 部分中的 “小节 13, 构建系统”。 Spring Boot Maven 插件 在 Maven 中提供 Spring Boot 支持,允许你打包可执行的 jar 或 war 存档,并在位置上运行一个应用程序。要使用它,必须使用 Maven 3.2(或更高版本)。
要使用 Spring Boot Maven 插件,请在 <?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> <!-- ... --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.BUILD-SNAPSHOT</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
前面的配置重新包装了在 Maven 生命周期的 $ mvn package $ ls target/*.jar target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
如果不包含 $ mvn package spring-boot:repackage $ ls target/*.jar target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
如果使用里程碑或快照版本,还需要添加适当的 <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
一旦 <?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"> <!-- ... --> <packaging>jar</packaging> <!-- ... --> </project>
在打包阶段,Spring Boot 增强了现有的存档。要启动的主类可以通过使用配置选项或通过以通常的方式向清单添加 若要生成并运行项目存档,可以键入以下内容: $ mvn package $ java -jar target/mymodule-0.0.1-SNAPSHOT.jar 为了构建既可执行又可部署到外部容器中的 war 文件,需要将嵌入式容器依赖项标记为 “provided”,如下例所示: <?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"> <!-- ... --> <packaging>war</packaging> <!-- ... --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- ... --> </dependencies> </project>
高级配置选项和示例可在插件信息页中找到。
Spring Boot Gradle 插件在 Gradle 中提供了 Spring Boot 支持,允许你打包可执行 jar 或 war 归档,运行 Spring Boot 应用程序,并使用
Spring Boot AntLib 模块为 Apache Ant 提供基本的 Spring Boot 支持。可以使用该模块创建可执行的 jar。要使用该模块,你需要在 <project xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:spring-boot="antlib:org.springframework.boot.ant" name="myapp" default="build"> ... </project>
你需要记住使用 $ ant -lib <folder containing spring-boot-antlib-2.1.0.BUILD-SNAPSHOT.jar>
一旦声明了
可以使用
下列嵌套元素可以与任务一起使用: 本节展示了两个 Ant 任务的示例。 指定 start-class. <spring-boot:exejar destfile="target/my-application.jar" classes="target/classes" start-class="com.example.MyApplication"> <resources> <fileset dir="src/main/resources" /> </resources> <lib> <fileset dir="lib" /> </lib> </spring-boot:exejar> 检测 start-class. <exejar destfile="target/my-application.jar" classes="target/classes"> <lib> <fileset dir="lib" /> </lib> </exejar>
如果你想使用除了 Maven、Gradle 或 Ant 之外的构建工具,你可能需要开发自己的插件。可执行 jar 需要遵循特定的格式,某些条目需要以未压缩的形式编写(有关的详细信请参阅附录中的 “可执行 jar 格式” 部分)。
Spring Boot Maven 和 Gradle 插件都使用
要重新打包现有存档,使其成为自包含的可执行存档,请使用
在重新打包归档时,可以使用
如果你的归档已经包含了库,你可以使用
如果不使用 下面的示例显示了一个典型的重新打包实现: Repackager repackager = new Repackager(sourceJarFile); repackager.setBackupSource(false); repackager.repackage(new Libraries() { @Override public void doWithLibraries(LibraryCallback callback) throws IOException { // Build system specific implementation, callback for each dependency // callback.library(new Library(nestedFile, LibraryScope.COMPILE)); } });
如果你对构建工具插件如何工作感兴趣,您可以查看 GitHub 上的 如果你有特定的与构建相关的问题,您可以查看 “how-to” 指南。 |