跳到主要内容

工程配置

Hasor Boot 的工程配置分为两部分:运行期依赖和 Maven/Gradle 打包插件。普通应用只需要核心依赖和打包插件;Web 应用还需要选择一个内嵌容器模块。以下示例使用 Hasor 5.2.0

普通应用依赖

使用统一 Boot.run(...) 的普通应用引入 hasor-boot

<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-boot</artifactId>
<version>5.2.0</version>
</dependency>

如果只是在开发阶段直接运行 main 方法,不需要额外运行期依赖。需要打包成可执行 Fat Jar 时,在 Maven 中配置 hasor-boot-maven-plugin

Web 应用依赖

Web 应用需要 hasor-web,并选择一个内嵌容器模块:

<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-web</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-boot-web-tomcat</artifactId>
<version>5.2.0</version>
</dependency>

容器模块已传递引入 Boot、Config、Web。必须只引入一种容器,零个或多个 SPI 实现都会报错。默认 JSON 渲染需业务提供 JSON 库,详见 JSON 渲染

内嵌容器模块可以按需要替换为:

  • hasor-boot-web-tomcat
  • hasor-boot-web-jetty
  • hasor-boot-web-undertow

Maven 打包插件

Hasor Boot Maven 插件会在 package 阶段把普通 jar 重打包成可执行归档。

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<manifest>
<mainClass>net.hasor.demo.boot.DemoHasorBootApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>net.hasor</groupId>
<artifactId>hasor-boot-maven-plugin</artifactId>
<version>5.2.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

如果不想通过 maven-jar-plugin 写入 Main-Class,也可以直接配置 Hasor Boot 插件参数:

<configuration>
<mainClass>net.hasor.demo.boot.DemoHasorBootApplication</mainClass>
</configuration>

构建和运行

执行 Maven package 后,target 目录中会生成可以直接运行的 Hasor Boot 归档。

mvn package
java -jar target/demo-hasor-boot-basic-5.2.0.jar

Web 应用也使用同样的 java -jar 方式运行:

java -jar target/demo-hasor-boot-web-5.2.0.jar

Gradle 打包插件

插件 ID 为 net.hasor.boot。插件解析仓库与普通依赖仓库需要分别配置;下面也配置了 Maven Local,以便使用本地构建的产物。

settings.gradle
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
}
rootProject.name = 'demo'
build.gradle
plugins {
id 'java'
id 'net.hasor.boot' version '5.2.0'
}

version = '1.0.0'
repositories {
mavenLocal()
mavenCentral()
}
java {
toolchain.languageVersion = JavaLanguageVersion.of(17)
}
configurations {
bootLoader
}
dependencies {
implementation 'net.hasor:hasor-boot:5.2.0'
bootLoader 'net.hasor:hasor-boot-loader:5.2.0'
}
tasks.named('bootJar') {
mainClass.set('com.example.Application')
loaderClasspath.from(configurations.bootLoader)
}

执行 ./gradlew bootJar 后生成 build/libs/demo-1.0.0-boot.jar,使用 java -jar build/libs/demo-1.0.0-boot.jar 运行。assemble 也会依赖 bootJar;默认保留普通 jar,可执行包使用 boot classifier。mainClass 未设置时会读取普通 jar 的 Manifest Main-ClassloaderClasspath 必须显式配置。

构建 Hasor 源码

Hasor 仓库本身使用 Gradle Wrapper,以上 Maven 配置用于消费 Hasor 的应用工程。在仓库根目录执行:

./build.sh package test
./build.sh install test

package 构建产物;install 还会安装到 Maven Local,包括独立构建的 Gradle 插件。脚本只有带 test 参数才执行测试;直接使用 ./gradlew build 则遵循 Gradle 的正常测试流程。

deploy 用于正式版本的 Maven Central 上传。它在实际构建前清理旧的 Central bundle 目录与 ZIP,防止旧产物混入;--dry-run 不执行清理和上传。发布参数见仓库 build.sh --help