如何解决Java中java.lang.NoClassDefFoundError: KMappedMarker缺失错误
解决java.lang.NoClassDefFoundError: kotlin/jvm/internal/markers/KMappedMarker问题
核心原因
OkHttp3从4.x版本开始依赖Kotlin标准库的特定类,你手动添加的Kotlin Jar包大概率存在版本不匹配问题,或是缺失了包含KMappedMarker类的核心模块(该类属于kotlin-stdlib的一部分,但需与OkHttp3版本要求的Kotlin版本对应)。
具体解决步骤
1. 匹配OkHttp3与Kotlin版本兼容性
OkHttp3的版本和Kotlin版本存在对应要求:
- 若使用OkHttp 4.x系列,需保证Kotlin stdlib版本不低于1.4.0
- 若使用OkHttp 3.x系列,Kotlin版本兼容1.3.x及以上即可
先确认你当前使用的OkHttp3版本,再选择对应版本的Kotlin依赖包。
2. 完整添加Kotlin核心依赖(Eclipse环境)
不要仅添加单个Kotlin Jar,需将以下核心Jar包全部加入项目Build Path:
kotlin-stdlib-${version}.jarkotlin-stdlib-common-${version}.jarkotlin-stdlib-jdk7-${version}.jar(或jdk8,根据你的Java版本选择)
所有Jar包需来自同一版本的Kotlin发行包,确保版本统一。
3. 检查并调整Build Path配置
右键项目 → Properties → Java Build Path:
- 在Libraries标签下,确认所有Kotlin Jar包无感叹号(无缺失或路径错误)
- 切换到Order and Export标签,将Kotlin Jar包移至OkHttp3 Jar包之前,保证类加载顺序正确
4. 无Kotlin依赖替代方案
如果不想引入Kotlin依赖,可以降级到OkHttp3 3.x的最终稳定版本(如3.14.9),该版本完全基于Java实现,不依赖Kotlin,只需替换项目中的OkHttp3 Jar包即可。
获取151个宝可梦名称的示例代码
解决依赖问题后,可使用以下代码实现需求:
import com.google.gson.Gson; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; import java.util.List; // 对应PokeAPI返回的数据结构 class PokemonListResponse { private List<PokemonResult> results; public List<PokemonResult> getResults() { return results; } class PokemonResult { private String name; public String getName() { return name; } } } public class PokemonFetcher { public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); Gson gson = new Gson(); String url = "https://pokeapi.co/api/v2/pokemon?limit=151"; Request request = new Request.Builder().url(url).build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); PokemonListResponse pokemonList = gson.fromJson(response.body().string(), PokemonListResponse.class); for (PokemonListResponse.PokemonResult result : pokemonList.getResults()) { System.out.println(result.getName()); } } catch (IOException e) { e.printStackTrace(); } } }
额外注意
- 确认Gson Jar包已正确添加到项目Build Path
- 运行前再次核对所有依赖Jar的版本,避免版本冲突
内容的提问来源于stack exchange,提问作者Quenuo
相关产品推荐
相关产品推荐

