我正在尝试从源代码编译mirth连接https://github.com/nextgenhealthcare/connect来自3.9.0标签(但以前的版本也因相同的错误而失败(
一方面,我认为它需要用java9+编译,因为它使用了一些javafx的东西,错误也表明:
[javac] Compiling 519 source files to /home/pwirth/code/connect/client/classes
[javac] /home/pwirth/code/connect/client/src/com/mirth/connect/client/ui/Frame.java:54: error: cannot access Platform
[javac] import javafx.application.Platform;
[javac] ^
[javac] bad class file: /home/pwirth/code/connect/client/lib/openjfx.jar(javafx/application/Platform.class)
[javac] class file has wrong version 54.0, should be 52.0
[javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
另一方面,它使用的类已经不可访问了,因为java9就像这样:
[javac] (package com.sun.rowset is declared in module java.sql.rowset, which does not export it)
[javac] /home/pwirth/code/connect/server/src/com/mirth/connect/server/userutil/MirthCachedRowSet.java:24: error: package com.sun.rowset is not visible
[javac] import com.sun.rowset.CachedRowSetImpl;
[javac] ^
[javac] (package com.sun.rowset is declared in module java.sql.rowset, which does not export it)
[javac] /home/pwirth/code/connect/server/src/com/mirth/connect/server/userutil/DatabaseConnection.java:128: error: incompatible types: MirthCachedRowSet cannot be converted to CachedRowSet
[javac] CachedRowSet crs = new MirthCachedRowSet();
我正在执行ant -f mirth-build.xml
,当运行它时,我的JAVA_HOME
指向一个java 11,并且具有打开模块的ant选项,如它们的readme.md中所述,该readme.md声明--add-modules=java.sql.rowset
得到了完全相同的问题,但实际上有三个选项:
-
使用Java 9+版本编译。在这种情况下,打开
server/build.xml
第85行写着:
Uncomment the following and add additional dashes in front of the arguments to allow Java 9+
这样做,它就变成了:
<compilerarg value="--add-modules" /> <compilerarg value="java.sql.rowset,java.xml.ws" /> <compilerarg value="--add-exports" /> <compilerarg value="java.sql.rowset/com.sun.rowset=ALL-UNNAMED" />
-
使用无Oracle-无Java FX JDK8:编译
不可能。编译客户端时,它会从
client/lib
文件夹中提取包含的openjfx.jar
,该文件夹是用JDK10(版本54(构建的,并且会抛出一个错误,因为您是用JDK8(版本52(构建的。 -
使用Oracle JDK 8或使用支持FX的替代JDK 8。
我使用Azul Zulu版本8.0.252.fx-Zulu 成功编译
开始使用不同JDK的一个简单方法是SDKMAN!
我过去用oraclejava8编译了mirth3.8,它解决了您的问题,但在oracle进行许可更改之前,我就已经安装了它。
根据您的使用情况,出于开发目的,您仍然可以从Oracle获得它。
Mirth类可能应该被固定为不直接依赖于com.sun.rowset.CachedRowSetImpl
。