我正在开发一个运行Java 11的Java应用程序。我选择Java 11是因为它是最后一个具有LTS的Java版本。
在这个Java应用程序中,我使用了OpenCV,并使用了来自contrib模块的库。我使用Homebrew安装带有Java绑定和contrib模块的OpenCV。
我尝试的第一件事是在没有指定Java目标版本的情况下从源代码安装OpenCV。当我这样做时,OpenCV正确安装,但是当我尝试在代码中使用它时,我遇到了以下错误:
class file has wrong version 61.0, should be 55.0
我认为这意味着由于OpenCV是通过Java 17编译的,所以我不能在我的Java 11代码中使用它。值得一提的是,因为我在我的Java项目中使用Maven,所以我首先通过类似于mvn install:install-file -Dfile=/usr/local/Cellar/opencv/4.5.5_1/share/java/opencv4/opencv-455.jar的方式将OpenCV JAR导出到本地Maven模块中。我在这个导出过程中使用的是OpenJDK 11作为我的JRE。
我也将OpenJDK 11作为我的Mac上的默认JDK(java -version和javac -version都返回OpenJDK 11)。所以看到这个错误,我有点惊讶。 因此,为了解决这个问题,我一直在尝试使用标志-DOPENCV_JAVA_TARGET_VERSION=11安装OpenCV。但是,当我这样做时,我遇到了以下错误:
这个错误提示好像暗示OpenCV需要至少JDK 18,但我觉得这不太对。每个OpenCV版本是否都有最低要求的JDK版本?是不是应该使用OpenCV 3呢?非常感谢您的帮助,谢谢!
我尝试的第一件事是在没有指定Java目标版本的情况下从源代码安装OpenCV。当我这样做时,OpenCV正确安装,但是当我尝试在代码中使用它时,我遇到了以下错误:
class file has wrong version 61.0, should be 55.0
我认为这意味着由于OpenCV是通过Java 17编译的,所以我不能在我的Java 11代码中使用它。值得一提的是,因为我在我的Java项目中使用Maven,所以我首先通过类似于mvn install:install-file -Dfile=/usr/local/Cellar/opencv/4.5.5_1/share/java/opencv4/opencv-455.jar的方式将OpenCV JAR导出到本地Maven模块中。我在这个导出过程中使用的是OpenJDK 11作为我的JRE。
我也将OpenJDK 11作为我的Mac上的默认JDK(java -version和javac -version都返回OpenJDK 11)。所以看到这个错误,我有点惊讶。 因此,为了解决这个问题,我一直在尝试使用标志-DOPENCV_JAVA_TARGET_VERSION=11安装OpenCV。但是,当我这样做时,我遇到了以下错误:
[ 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呢?非常感谢您的帮助,谢谢!
-DOPENCV_JAVA_SOURCE_VERSION=11
。请参见OpenCV问题13435。 - skomisa