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

使用Gradle构建项目时遇到OpenNLP类文件版本不兼容错误

问题描述

手动执行以下命令时,项目运行完全正常:

javac -cp tika/tika-2.8.0/tika-app-2.8.0.jar:opennlp/apache-opennlp-2.2.0/lib/* App.java
java -cp .:tika/tika-2.8.0/tika-app-2.8.0.jar:opennlp/apache-opennlp-2.2.0/lib/* App

尝试用Gradle自动化构建,创建了如下目录结构:

$ tree -L 2 my-app/
my-app/
├── build
│   ├── classes
│   ├── generated
│   └── tmp
├── build.gradle
├── opennlp
│   ├── apache-opennlp-2.2.0
│   └── apache-opennlp-2.2.0-bin.zip
├── src
│   └── main
└── tika
    ├── tika-2.8.0
    └── tika-2.8.0-src.zip

$ tree src
src
└── main
    └── java
        └── App.java

build.gradle配置如下:

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation files('tika/tika-2.8.0/tika-app-2.8.0.jar')
    implementation files('opennlp/apache-opennlp-2.2.0/lib/opennlp-tools-2.2.0.jar')
}

task runApp(type: JavaExec) {
    main = 'App'
    classpath = sourceSets.main.runtimeClasspath
}

执行gradle build后出现编译错误:

$ gradle build

> Task :compileJava
/home/me/tmp/my-app/src/main/java/App.java:7: error: cannot access opennlp.tools.sentdetect.SentenceDetectorME
import opennlp.tools.sentdetect.SentenceDetectorME;
                               ^
  bad class file: /home/me/tmp/my-app/opennlp/apache-opennlp-2.2.0/lib/opennlp-tools-2.2.0.jar(opennlp/tools/sentdetect/SentenceDetectorME.class)
    class file has wrong version 55.0, should be 52.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 4s
1 actionable task: 1 executed

环境版本信息:

$ java --version
openjdk 17.0.7 2023-04-18
OpenJDK Runtime Environment (build 17.0.7+7-Ubuntu-0ubuntu118.04)
OpenJDK Server VM (build 17.0.7+7-Ubuntu-0ubuntu118.04, mixed mode, sharing)

$ javac --version
javac 17.0.7

$ gradle --version

------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------

Build time:   2022-03-31 15:25:29 UTC
Revision:     540473b8118064efcc264694cbcaa4b677f61041

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          1.8.0_362 (Private Build 25.362-b09)
OS:           Linux 4.15.0-211-generic i386
解决方案

错误原因

报错里的版本号对应:55.0是Java 11的class文件版本,52.0是Java 8的版本。手动编译用的是Java 17,兼容Java 11编译的jar;但Gradle当前使用的是Java 8运行,无法识别Java 11编译的opennlp-tools-2.2.0.jar,导致版本不兼容错误。

解决步骤

  1. 让Gradle使用Java 17运行

    • 方法一:在项目根目录创建gradle.properties文件,添加以下内容(替换为你的Java 17实际安装路径):
      org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-i386
      
    • 方法二:在运行Gradle命令前设置环境变量:
      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-i386
      gradle build
      
  2. 优化依赖配置(可选,推荐)
    放弃本地jar依赖,直接用MavenCentral的远程依赖,Gradle会自动匹配兼容版本,避免本地文件的版本问题。修改build.gradle为:

    plugins {
        id 'java'
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.apache.tika:tika-app:2.8.0'
        implementation 'org.apache.opennlp:opennlp-tools:2.2.0'
    }
    
    task runApp(type: JavaExec) {
        main = 'App'
        classpath = sourceSets.main.runtimeClasspath
    }
    
  3. 验证
    执行gradle build确认编译通过,再执行gradle runApp验证项目正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:56