在之前的笔记中,讨论了Spring Boot和JAR部署。本文将探索如何将Spring Boot应用打包成JAR和WAR包,并且使用单一实现。通常情况下,使用Spring Boot时,可能会将项目打包成JAR。但如果想使用servlet容器,同样可以实现。
"spring-boot-example-implementation"是一个Maven项目,包含了Spring Boot应用的所有实现;"spring-boot-example-jar-package"没有自己的源代码,它的职责是将应用打包成可执行的JAR包;"spring-boot-example-war-package"同样没有自己的源代码,它的职责是将应用打包成WAR包,以便部署到servlet容器,如Tomcat。这三个项目共享同一个父POM项目"spring-boot-example",它为所有子项目提供通用的基本配置。
"spring-boot-example"是一个简单的POM项目,声明了三个模块级别的项目,并配置了编译器以Java 1.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">
<properties>
<spring-boot.version>1.5.7.RELEASE</spring-boot.version>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<modules>
<module>spring-boot-example-implementation</module>
<module>spring-boot-example-jar-package</module>
<module>spring-boot-example-war-package</module>
</modules>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration><source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
"spring-boot-example-implementation"的POM如下所示。
<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>
<parent>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>spring-boot-example-implementation</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
</project>
"spring-boot-example-jar-package"项目没有源代码。它所做的就是将"spring-boot-example-implementation"项目打包成一个可执行的JAR文件,可以部署它。
<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>
<parent>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>spring-boot-example-jar-package</artifactId>
<properties>
<start-class>com.song.web.boot.ApplicationStart</start-class>
</properties>
<dependencies>
<dependency>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example-implementation</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.song.web.boot.ApplicationStart</mainClass>
</configuration>
<executions>
<execution>
<goals><goal>repackage</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
"spring-boot-example-war-package"项目没有源代码。它所做的就是将"spring-boot-example-implementation"项目打包成一个WAR文件,可以部署到servlet容器。
<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>
<parent>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>spring-boot-example-war-package</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example-implementation</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${spring-boot.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果将项目加载到Eclipse中,可以直接在"spring-boot-example-implementation"项目上运行或调试应用程序。在"spring-boot-example-jar-package"项目中,可以使用以下命令启动应用程序。
mvn spring-boot:run
Maven构建成功后,可以使用以下命令启动JAR文件。
java -jar target/spring-boot-example-jar-package.jar
如果愿意,也可以在Eclipse中通过Tomcat服务器附加"spring-boot-example-war-package"来运行和调试应用程序。当然,需要测试将WAR文件部署到独立的servlet容器。已经在独立的Tomcat服务器上测试了WAR。
当以JAR方式启动应用程序时,它监听的端口号是"8090"。端口号配置在"spring-boot-example-implementation"项目中。可以查看之前的笔记了解详细信息;当以WAR方式启动应用程序时,Tomcat不会使用这个端口号。它将监听自己的端口号。在情况下,它是"8080"。
以下是从浏览器访问托管在Tomcat上的应用程序时的结果。
这是一篇关于Spring Boot和JAR与WAR部署的笔记;