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

Java模块化JAR类找不到但javap可识别,运行及jlink失败求助

模块化JAR运行与jlink问题排查方案

1. 先解决jlink命令的明显拼写错误

你提到jlink报错“demoapp不存在主类com.dhl.raf.demoapp.App”,这是命令中包名拼写错误导致的——实际主类包名是com.foo.bar.demoapp.App,请立即修正命令中的主类路径,避免使用错误的com.dhl.raf前缀。

如果你的module-info.java已经声明了主类,jlink可以省略主类参数,直接依赖模块的声明配置,示例命令:

jlink --module-path "jars;%JAVA_HOME%/jmods" --add-modules demoapp --output demoapp-image --launcher run=demoapp

生成的镜像中会包含run.bat脚本,直接执行即可启动应用。

2. 修复模块化JAR的运行命令

你当前执行的java --module-path jars com.foo.bar.demoapp.App格式错误,模块化应用的运行必须指定模块名+主类的组合,正确格式有两种:

  • 显式指定模块和主类:
    java --module-path ./jars -m demoapp/com.foo.bar.demoapp.App
    
  • 如果module-info.java已声明主类,可简化为仅指定模块名:
    java --module-path ./jars -m demoapp
    

3. 验证Maven配置细节

确保你的pom.xml中maven-jar-plugin配置正确生成模块化JAR:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.foo.bar.demoapp.App</mainClass>
            </manifest>
        </archive>
        <!-- 必须开启此选项以生成模块化JAR -->
        <modularJar>true</modularJar>
    </configuration>
</plugin>

4. 确认module-info.java的正确性

检查你的模块声明文件是否正确声明主类,示例:

module demoapp {
    exports com.foo.bar.demoapp;
    // 明确声明模块主类
    mainClass com.foo.bar.demoapp.App;
}

可通过javap -p module-info.class验证主类声明是否生效。

5. 校验JAR文件结构

使用jar tf your-jar-file.jar查看JAR内部结构,确保:

  • module-info.class位于JAR根目录
  • App.class位于com/foo/bar/demoapp/子目录下
  • 所有class文件的路径与包名完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:19