You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Vaadin作为WildFly模块使用?WAR瘦身及编译问题求助

Vaadin 14.6.1作为WildFly 24.0.1模块部署的解决方案

针对你遇到的WAR包过大、设provided后前端编译失败的问题,以下是可行的分步解决方案:

一、解决Maven前端编译依赖问题

当Vaadin依赖设为provided时,前端构建插件无法在编译期找到Vaadin类,导致报错。可以通过两种方式处理:

方式1:编译保留依赖,打包时排除

使用Maven插件在编译阶段保留Vaadin依赖的compile scope,打包阶段自动排除这些JAR:
在pom.xml中添加如下插件配置:

<build>
  <plugins>
    <!-- 复制Vaadin依赖到临时目录,方便后续制作WildFly模块 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>copy-vaadin-deps</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy-dependencies</goal>
          </goals>
          <configuration>
            <includeGroupIds>com.vaadin,com.vaadin.flow</includeGroupIds>
            <outputDirectory>${project.build.directory}/vaadin-libs</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <!-- 打包WAR时排除Vaadin相关JAR -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
        <packagingExcludes>WEB-INF/lib/com.vaadin*.jar,WEB-INF/lib/com.vaadin.flow*.jar</packagingExcludes>
      </configuration>
    </plugin>
  </plugins>
</build>

这样编译时Vaadin依赖在classpath中,能正常执行build-frontend目标,最终WAR包不会包含这些JAR。

方式2:为前端插件单独添加依赖

将主Vaadin依赖设为provided,同时在vaadin-maven-plugin中添加Vaadin依赖,确保插件执行时能访问所需类:

<dependencies>
  <dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-core</artifactId>
    <version>14.6.1</version>
    <scope>provided</scope>
  </dependency>
  <!-- 其他Vaadin依赖同理设为provided -->
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-maven-plugin</artifactId>
      <version>14.6.1</version>
      <executions>
        <execution>
          <goals>
            <goal>build-frontend</goal>
          </goals>
        </execution>
      </executions>
      <dependencies>
        <!-- 插件自身需要的Vaadin依赖 -->
        <dependency>
          <groupId>com.vaadin</groupId>
          <artifactId>vaadin-core</artifactId>
          <version>14.6.1</version>
        </dependency>
      </dependencies>
    </plugin>
    <!-- 同样添加war插件排除配置 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
        <packagingExcludes>WEB-INF/lib/com.vaadin*.jar,WEB-INF/lib/com.vaadin.flow*.jar</packagingExcludes>
      </configuration>
    </plugin>
  </plugins>
</build>

二、创建WildFly Vaadin模块

  1. 在WildFly安装目录下,创建模块目录:modules/system/layers/base/com/vaadin/main(路径不存在则逐层新建)。
  2. 将所有Vaadin相关JAR包(包括项目依赖的transitive JAR,比如从target/vaadin-libs目录复制)放到这个目录。
  3. 创建module.xml文件,定义模块信息和依赖:
<?xml version="1.0" encoding="UTF-8"?>
<module name="com.vaadin" xmlns="urn:jboss:module:1.9">
  <resources>
    <!-- 列出所有Vaadin相关JAR,示例如下,根据实际依赖补充 -->
    <resource-root path="vaadin-core-14.6.1.jar"/>
    <resource-root path="vaadin-flow-server-14.6.1.jar"/>
    <resource-root path="vaadin-flow-client-14.6.1.jar"/>
    <resource-root path="vaadin-spring-boot-starter-14.6.1.jar"/>
    <!-- 其他依赖JAR如jackson、slf4j等如果需要也可添加,或依赖WildFly已有模块 -->
  </resources>
  <dependencies>
    <!-- 必须的WildFly核心模块依赖 -->
    <module name="javax.api"/>
    <module name="javax.servlet.api"/>
    <module name="javax.annotation.api"/>
    <module name="javax.validation.api"/>
    <module name="org.slf4j"/>
    <module name="com.fasterxml.jackson.core.jackson-databind"/>
    <module name="org.springframework.spring-core" optional="true"/> <!-- 如果用了Spring -->
    <!-- 根据Vaadin依赖的其他模块补充 -->
  </dependencies>
</module>

注意:如果Vaadin依赖的某些JAR已经是WildFly的内置模块(比如jackson),不需要重复添加,直接依赖对应模块即可。

三、配置WAR包引用WildFly模块

在项目的src/main/webapp/WEB-INF目录下创建jboss-deployment-structure.xml,告诉WildFly当前WAR需要依赖Vaadin模块:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="com.vaadin" export="true"/> <!-- export确保模块类能被应用访问 -->
    </dependencies>
  </deployment>
</jboss-deployment-structure>

确保Maven打包时将这个文件包含到WAR中,可通过war插件的webResources配置确认(如果之前没加,可补充到war插件配置里)。

四、验证部署

  1. 执行mvn clean package,检查生成的WAR包,确认WEB-INF/lib下没有Vaadin相关JAR。
  2. 将WAR包部署到WildFly,启动服务器后测试应用功能。如果出现ClassNotFoundException,说明module.xml中遗漏了JAR或模块依赖,需要补充对应内容。

内容的提问来源于stack exchange,提问作者Inercio Belton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:06:02