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

