Micronaut 如何像Spring Boot、Grails一样同时构建fatjar和war包?
Micronaut同时构建fatjar和war包实现方案
完全可以实现,只需要调整对应构建工具的配置即可,操作和Spring Boot、Grails的配置逻辑基本一致,以下分别是Gradle和Maven两种构建工具的配置方法:
Gradle 配置
默认创建的Micronaut Gradle项目已经自带com.github.johnrengelman.shadow插件用于构建fatjar,只需要补充war包相关配置即可:
- 首先在
build.gradle中引入war插件 - 添加Servlet API相关依赖,设置运行时依赖为provided scope:
dependencies { implementation("io.micronaut.servlet:micronaut-servlet-api") providedRuntime("io.micronaut.servlet:micronaut-http-server-servlet") // 原有其他依赖保持不变 }
- 可以按需自定义war包的名称、输出路径等配置:
war { archiveName = "demo-app.war" }
- 执行
./gradlew build命令后,会在build/libs目录下同时生成带-all后缀的fatjar文件,以及后缀为.war的可部署war包。
Maven 配置
默认创建的Micronaut Maven项目已经自带maven-shade-plugin插件用于构建fatjar,补充war插件配置即可:
- 保留pom.xml顶部默认的
<packaging>jar</packaging>配置不变,新增maven-war-plugin插件配置,将war构建目标绑定到package阶段:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <executions> <execution> <id>build-war-package</id> <phase>package</phase> <goals> <goal>war</goal> </goals> </execution> </executions> <configuration> <packagingIncludes>META-INF/services/**,WEB-INF/classes/**,WEB-INF/lib/**</packagingIncludes> <warName>demo-app</warName> </configuration> </plugin>
- 添加Servlet相关依赖,scope设置为provided:
<dependency> <groupId>io.micronaut.servlet</groupId> <artifactId>micronaut-http-server-servlet</artifactId> <scope>provided</scope> </dependency>
- 执行
./mvnw package命令后,会在target目录下同时生成fatjar和war包。
注意:如果生成的war包需要部署到Tomcat、Jetty等外部Servlet容器,需要额外新增一个启动类,继承
ServletMicronautInitializer,容器会自动识别该类完成Micronaut上下文初始化:import io.micronaut.servlet.http.ServletMicronautInitializer; public class AppServletInitializer extends ServletMicronautInitializer { }
内容的提问来源于stack exchange,提问作者Feng Yu
相关产品推荐
相关产品推荐

