【问题标题】:Mirth Connect: which java version to use to compile it from source?Mirth Connect:使用哪个 java 版本从源代码编译它?
【发布时间】:2020-08-14 18:00:05
【问题描述】:

我正在尝试从 3.9.0 标签的源代码https://github.com/nextgenhealthcare/connect 编译 mirth connect(但以前的版本也因同样的错误而失败)

目前我认为它需要用 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.

另一方面,它使用自 java 9 以来不再可访问的类:

    [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 中所述,它声明了--add-modules=java.sql.rowset

【问题讨论】:

    标签: java build ant mirth


    【解决方案1】:

    遇到了完全相同的问题,但实际上有三个选项:

    1. 使用 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" />
      
    2. 使用无 Oracle 编译 - 无 Java FX JDK 8:

      不可能。编译客户端时,它将从client/lib 文件夹中提取包含的openjfx.jar,该文件夹是使用JDK 10(版本54)构建的,并且会抛出错误,因为您是使用JDK8(版本52)构建的。

    3. 使用 Oracle JDK 8 或使用支持 FX 的替代 JDK 8。

      我使用 Azul Zulu 版本 8.0.252.fx-zulu 成功编译

      SDKMAN 是开始使用不同 JDK 的简单方法!

    【讨论】:

    • 感谢您指出 build.xml 中的注释。我一直试图将 docs/mcservice-java9+.vmoptions 中的 jvm 参数传递给 ant 命令本身,但无济于事。我现在陷入测试运行目标,错误为FATAL ERROR in native method: processing of -javaagent failed, processJavaStartFailed。你有没有遇到过同样的情况?
    • @Johan Smolders 非常有帮助!也许我们应该创建一个要点或其他东西:D
    • @spectorar 我没有收到那个错误。我刚刚做了:sdk use java 8.0.252.fx-zulucd serverant -f mirth-build.xml build
    • 自从提出问题后,此页面已添加到 wiki。在 Mirth Slack 频道中指出,Nextgen 正在从旧 wiki 迁移仍然与 github 相关的页面。他们还表示,他们将致力于更新构建脚本,使其对 java 9+ 更加友好。 github.com/nextgenhealthcare/connect/wiki/…
    【解决方案2】:

    我过去使用 oracle java 8 编译了 mirth 3.8,它解决了您的问题,但我在 Oracle 进行许可更改之前安装了它。

    根据您的使用情况,您仍然可以从 Oracle 获取它用于开发目的。

    那个 Mirth 类可能应该被修复为不直接依赖于com.sun.rowset.CachedRowSetImpl

    【讨论】:

    • 不知道为什么这适用于 javafx 的混乱,但谢谢,感觉就像我回到了 2012 年或者……如果你知道任何地方的完整指南,请告诉我 :)
    • 在 javafx 开源之前,它包含在 oracle java 中,但未包含在 openJDK 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2012-04-06
    • 2013-02-19
    相关资源
    最近更新 更多