跳至主要内容

webforJ 构建插件 26.01

在 ChatGPT 中打开

webforJ 构建插件将在您的 Maven 或 Gradle 构建中执行 webforJ 的构建时工作。您只需要添加一次,它就会将其目标绑定到您已经运行的阶段,无需维护单独的前端项目。它驱动 前端打包工具,编译前端,运行前端测试,提供开发监视,并将一个 热替换工具 附加到它启动的应用程序。

添加插件

通过 原型 创建的 webforJ 项目已经包含该插件。要将其添加到现有项目中:

通过声明插件并设置 <extensions>true</extensions> 将其目标绑定到构建中,而无需编写执行块:

pom.xml
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
</plugin>

目标和任务

三个目标绑定到您已经运行的阶段,因此正常的 mvn package./gradlew build 会生成一个包含已编译前端的应用程序,并且测试阶段将同时运行前端测试和 Java 测试。监视是在开发过程中手动启动的:

Maven 目标Gradle 任务运行做什么
bundlewebforjBundleprepare-package,在每个 jar 和 war 之前编译打包应用程序的前端
testwebforjTest在测试阶段运行前端测试
cleanwebforjCleanFrontend在清理阶段删除生成的前端
watchwebforjWatch手动,和应用并行在开发过程中变更时重新构建
push-keyswebforjPushKeys手动, 每次部署一次生成 推送通知 的密钥对并打印配置行

在运行应用程序之前,首先启动监视,示例为 mvn compile webforj:watch spring-boot:run。一个原型项目将其设置为默认目标,因此仅需 mvn 即可启动所有内容。其重载行为在 前端监视 中有介绍。

使用 Maven 的 -DskipTests 或 Gradle 的 -PskipTests 跳过前端测试和 Java 测试。

选项

将选项设置为 Maven <configuration> 元素,或作为 Gradle webforj { } 扩展值。每个 Maven 选项(除 pluginshotswap 外)也接受命令行上的 -D 属性。这两种构建工具彼此镜像:

Maven 元素Maven 属性Gradle默认目的
bunVersionwebforj.bundler.versionbunVersion管理固定 Bun 版本以实现可重现的构建
bunPathwebforj.bundler.pathbunPath下载使用现有的 Bun 可执行文件,而不是下载
cacheDirwebforj.bundler.cacheDircacheDir${user.home}/.webforj/bun管理的 Bun 二进制文件缓存的位置
sourceRootwebforj.bundler.sourceRootsourceRootsrc/main/frontend前端入口源文件的位置
workDirwebforj.bundler.workDirworkDirtarget/bundle插件写入其生成的构建文件的位置
pluginsplugins根据 id 开启或关闭 扩展,例如 webforj-tailwind
excludePackageswebforj.bundler.excludePackagesexcludePackages在注解扫描过程中跳过的包前缀
eagerwebforj.bundler.eagereagerfalse在应用启动时加载整个前端,而不是按视图加载,参见 Eager bundle
testArgswebforj.bundler.testArgstestArgs传递给前端测试运行器的额外参数
hotswaphotswap附加一个类更新工具到构建启动的应用程序,参见 热替换

例如,要固定 Bun 版本并开启 Tailwind:

pom.xml
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<bunVersion>1.3.0</bunVersion>
<plugins>
<webforj-tailwind>true</webforj-tailwind>
</plugins>
</configuration>
</plugin>