我正在开发一个运行Java 11的Java应用程序,我选择了Java 11,因为它是LTS的最后一个Java版本。我在这个Java应用程序中使用OpenCV,并且使用来自contrib模块的库。我正在使用Homebrew安装带有Java绑定和控制模块的OpenCV。
我尝试的第一件事是从源代码安装OpenCV,而不指定Java版本。当我这样做时,OpenCV安装正确,但是当我试图在代码中使用它时,我得到了以下错误:
class file has wrong version 61.0, should be 55.0
我认为这意味着因为OpenCV是通过Java 17编译的,所以我不能在Java 11代码中使用它。还值得一提的是,由于我在我的OpenCV项目中使用Maven,我首先通过类似于mvn install:install-file -Dfile=/usr/local/Cellar/opencv/4.5.5_1/share/java/opencv4/opencv-455.jar的东西将Maven JAR导出到本地Maven模块中。我使用OpenJDK 11作为这个导出的JRE。
我还使用OpenJDK 11作为我的Mac上的默认JDK (java -version和javac -version都返回OpenJDK 11)。所以我对这个错误感到有点惊讶。因此,为了解决这个问题,我一直试图安装带有标志OpenCV的-DOPENCV_JAVA_TARGET_VERSION=11。然而,当我这样做时,我得到了以下错误:
[ 11%] Generating opencv-455.jar
cd /tmp/opencv-20220410-81173-p3o3uo/opencv-4.5.5/build/modules/java/jar/opencv && /usr/local/bin/ant -noinput -k jar
Picked up _JAVA_OPTIONS: -Duser.home=/Users/dpapp/Library/Caches/Homebrew/java_cache
Buildfile: /private/tmp/opencv-20220410-81173-p3o3uo/opencv-4.5.5/build/modules/java/jar/opencv/build.xml
[tstamp] Honouring environment variable SOURCE_DATE_EPOCH which has been set to 1640404407
jar:
[javac] Compiling 280 source files to /private/tmp/opencv-20220410-81173-p3o3uo/opencv-4.5.5/build/modules/java/jar/opencv/build/classes
[javac] warning: target release 11 conflicts with default source release 18
Target 'jar' failed with message 'Compile failed; see the compiler error output for details.'.
BUILD FAILED
/private/tmp/opencv-20220410-81173-p3o3uo/opencv-4.5.5/build/modules/java/jar/opencv/build.xml:14: Compile failed; see the compiler error output for details这个错误使它听起来像是OpenCV至少需要JDK 18,这听起来不对。每个OpenCV版本都有最低限度的JDK吗?我应该使用OpenCV 3来代替吗?任何帮助都是非常感谢的,谢谢!
发布于 2022-04-11 15:28:44
我已经部分弄清楚了这是怎么回事。
作为运行brew install opencv的prereq,我运行了brew install ant。brew install ant安装最新的OpenJDK (编写本报告时的OpenJDK 18 ),并忽略在我的机器上设置的OpenJDK主路径。这导致brew install opencv试图在目标设置为11时使用Java18安装OpenCV,这会引发一个错误。
https://stackoverflow.com/questions/71821119
复制相似问题