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

如何用Makefile引入Gson?运行时类找不到异常求助

解决运行LogAppend时的NoClassDefFoundError问题

问题背景

你的文件夹结构:

l_append
--LogAppend.java
--User.java
l_read
--LogRead.java
makefile
gson.jar

Makefile内容:

LIBRARY_PATHS = gson.jar

CLASS_FILES = l_append/LogAppend.class l_append/User.class l_read/LogRead.class

Default: $(CLASS_FILES) create_bin

%.class: %.java
    $(JC) -cp .:$(LIBRARY_PATHS) $<

create_bin:
    jar -cvmf MANIFEST_LA.MF logappend.jar  l_append/LogAppend.class
    cat stub.sh logappend.jar > logappend && chmod +x logappend

    jar -cvmf MANIFEST_LR.MF logread.jar l_read/LogRead.class
    cat stub.sh logread.jar > logread && chmod +x logread

clean:
    $(RM)  l_read/*.class l_append/*.class log*

LogAppend.java中引入并使用了Gson:

import com.google.gson.Gson;
// ...
Gson gson = new Gson();

执行make后运行LogAppend,抛出异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
        at l_append.LogAppend.writeToLog(LogAppend.java:165)
        at l_append.LogAppend.main(LogAppend.java:90)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson

解决建议

方案1:打包胖Jar(包含依赖)

当前打包只包含了自己的class文件,未引入gson.jar。修改Makefile的create_bin步骤,将gson.jar合并到最终的jar包中:

create_bin:
    # 打包LogAppend、User类和gson.jar到同一个jar
    jar -cvmf MANIFEST_LA.MF logappend.jar l_append/LogAppend.class l_append/User.class gson.jar
    cat stub.sh logappend.jar > logappend && chmod +x logappend

    jar -cvmf MANIFEST_LR.MF logread.jar l_read/LogRead.class
    cat stub.sh logread.jar > logread && chmod +x logread

方案2:通过MANIFEST指定类路径

在MANIFEST_LA.MF中添加Class-Path属性,指定gson.jar的位置(运行时需保证gson.jar与logappend在同一目录):

Main-Class: l_append.LogAppend
Class-Path: gson.jar

Makefile的打包命令无需修改,JVM会根据MANIFEST中的配置自动加载依赖。

方案3:修改启动脚本指定类路径

调整stub.sh,在启动命令中明确包含gson.jar的类路径:

#!/bin/sh
java -cp .:gson.jar l_append.LogAppend "$@"

合并后的logappend执行文件会自动使用该类路径启动程序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:44:54