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

webstart-maven-plugin 1.0-beta-7的jnlp-download-servlet执行失败原因

webstart-maven-plugin:1.0-beta-7的jnlp-download-servlet执行失败问题排查

核心异常根源

从堆栈日志可以看到,空指针异常(NullPointerException)发生在DefaultArtifactUtil.artifactContainsClass方法中,说明插件在尝试验证指定的mainClass是否存在于our.gui-client依赖jar时,无法获取到该依赖的有效文件引用。

可能的原因及解决措施

  • 依赖未正确同步到本地仓库
    执行mvn clean install -U强制更新本地仓库,确保com.our:our.gui-client:${project.version}这个依赖已经完整下载到本地Maven仓库中。

  • mainClass路径错误或不存在
    检查our.gui-client项目中是否真的存在com.our.control.guiclient.MainApp类,可能是类名拼写错误、包路径变更,或者该类被迁移到了其他模块。

  • 插件版本存在已知bug
    webstart-maven-plugin 1.0-beta-7是较旧的测试版本,存在不少已知的空指针问题。建议升级到更稳定的版本,比如1.0-beta-9或更高版本,新版本修复了这类兼容性问题。

  • 未显式声明依赖
    当前pom.xml中没有直接引入our.gui-client依赖,插件可能无法找到该jar文件。需要显式添加依赖:

    <dependency>
      <groupId>com.our</groupId>
      <artifactId>our.gui-client</artifactId>
      <version>${project.version}</version>
    </dependency>
    
  • 生命周期阶段冲突
    插件绑定在prepare-package阶段,此时our.gui-client可能还未完成打包或安装。可以将插件执行阶段调整为package或install之后,或者确保our.gui-client模块在当前项目构建前已经构建完成。

相关配置与日志

用户提供的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.our</groupId>
    <artifactId>our.control</artifactId>
    <version>1.20.2.7</version>
  </parent>

  <artifactId>our.gui-client.webstart</artifactId>
  <name>our.gui-client.webstart</name>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <webResources>
            <resource>
              <directory>webstatic</directory>
              <filtering>true</filtering>
              <includes>
                <include>**/*.html</include>
              </includes>
            </resource>
            <resource>
              <directory>webstatic</directory>
              <filtering>false</filtering>
              <excludes>
                <exclude>**/*.html</exclude>
              </excludes>
            </resource>
          </webResources>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>webstart-maven-plugin</artifactId>
        <version>1.0-beta-7</version>
        <executions>
          <execution>
            <phase>prepare-package</phase>
            <goals>
              <goal>jnlp-download-servlet</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <outputDirectoryName>webstart</outputDirectoryName>
          <outputJarVersions>false</outputJarVersions>
          <jnlpFiles>
            <jnlpFile>
              <templateFilename>template.vm</templateFilename>
              <outputFilename>our.jnlp</outputFilename>
              <jarResources>
                <jarResource>
                  <groupId>com.our</groupId>
                  <artifactId>our.gui-client</artifactId>
                  <version>${project.version}</version>
                  <mainClass>com.our.control.guiclient.MainApp</mainClass>
                </jarResource>
              </jarResources>
            </jnlpFile>
          </jnlpFiles>
          <sign>
            <keystore>${project.build.directory}/keyStore</keystore>
            <keypass>our</keypass>
            <storepass>our</storepass>
            <alias>webstart</alias>

            <storetype>jks</storetype>
            <validity>3650</validity>
            <dnameCn>our.com</dnameCn>
            <dnameOu>None</dnameOu>
            <dnameO>SIA</dnameO>
            <dnameL>L</dnameL>
            <dnameSt>St</dnameSt>
            <dnameC>C</dnameC>

            <keystoreConfig>
              <delete>true</delete>
              <gen>true</gen>
            </keystoreConfig>

            <verify>true</verify>
          </sign>
          <updateManifestEntries>
            <Trusted-Library>true</Trusted-Library>
            <Permissions>all-permissions</Permissions>
            <Codebase>*</Codebase>
          </updateManifestEntries>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

关键堆栈信息

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:webstart-maven-plugin:1.0-beta-7:jnlp-download-servlet (default) on project our.control.gui-client.webstart: Execution default of goal org.codehaus.mojo:webstart-maven-plugin:1.0-beta-7:jnlp-download-servlet failed.
...
Caused by: java.lang.NullPointerException
    at org.codehaus.mojo.webstart.util.DefaultArtifactUtil.artifactContainsClass (DefaultArtifactUtil.java:211)
    at org.codehaus.mojo.webstart.JnlpDownloadServletMojo.resolveJarResources (JnlpDownloadServletMojo.java:490)
    at org.codehaus.mojo.webstart.JnlpDownloadServletMojo.execute (JnlpDownloadServletMojo.java:180)
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:24:49