将Java8应用程序移植到Java11

将Java8应用程序移植到Java11,java,java-8,arduino-ide,java-11,Java,Java 8,Arduino Ide,Java 11,我一直在尝试将Java8桌面应用程序移植到Java11。我对Java9及其后版本与Java8的区别有一个很高的认识。例如:支持模块化,JDK是模块化的,没有单独的JRE 总的来说,我的理解是,移植到Java 11的过程包括以下步骤: 了解Java 9或更高版本不支持哪些依赖项。为此,我们使用Java8JDK中的jdeps-jdkinternals工具 在步骤1中找到的依赖项可以通过两种方式处理: a.如果依赖项包在Java 9或更高版本中仍然存在,但只是被封装,那么使用--add exports

我一直在尝试将Java8桌面应用程序移植到Java11。我对Java9及其后版本与Java8的区别有一个很高的认识。例如:支持模块化,JDK是模块化的,没有单独的JRE

总的来说,我的理解是,移植到Java 11的过程包括以下步骤:

  • 了解Java 9或更高版本不支持哪些依赖项。为此,我们使用Java8JDK中的
    jdeps-jdkinternals
    工具
  • 步骤1
    中找到的依赖项可以通过两种方式处理:
    a.如果依赖项包在Java 9或更高版本中仍然存在,但只是被封装,那么使用--add exports命令使JDK导出这些包。 b.如果依赖项包已从Java中删除,我将不得不更改应用程序的代码以使用替换包
    jdeps
    工具将为我提供可使用的替换包
  • 一旦不受支持的依赖性问题得到解决,我们就在所有JAR(由我们的程序生成并由我们的程序使用)上使用
    jdep--list dep
    ,来了解要包含在运行时中的JDK包
  • 列出依赖项后,我们提供Java 11的
    jlink
    ,为应用程序构建运行时
  • 我对这个过程的理解正确吗?我可能会面临哪些惊喜


    更新:

    下面的注释指出,可能不需要使用jlink的自定义运行时。然而,我们在使用普通的Java8运行时时时遇到了问题。在下面发布详细信息以了解更多上下文


    我们一直在尝试移植的项目是,并且正在使用Mac OS来实现这一点。Arduino使用
    Ant
    构建。
    build.xml
    是。我们最初做的是将JAVA_HOME更改为指向Java11,并使用ant dist编译它。出于某种原因,在build.xml中删除第69行末尾的../之前,应用程序不会在Java 11上编译。在此之后,应用程序按照build.xml第512行给出的路径编译并提供一个可执行文件。但是,当我们尝试运行可执行文件时,会出现错误
    Java运行时
    未找到。

    您有理由构建自定义运行时吗?这不是严格要求的,您仍然可以像在Java8中一样使用标准安装。您是否已经制定了分发自定义JRE的计划?@Deadron我认为我们应该创建一个自定义运行时。我们如何将Java8的运行时与Java11端口的应用程序一起使用?现在我记得,我确实尝试过使用Java8运行时。但是当我运行应用程序时(我们使用了
    ant run
    ),应用程序启动了,但出现了一个错误
    Java Runtime Engine not found
    ,这可能意味着您的框没有为ant脚本正确设置。安装过程已更改安装目录和环境变量。我们需要了解您的ant脚本的详细信息以提供进一步帮助。在
    jlink
    步骤中,如果您的modulepath上仍有自动模块,则会有一个拦截器。我建议您一步一步地详细说明迁移过程,并尝试一步一步地解决问题。迁移过程中需要花费大量精力来理解可能依赖于依赖库/框架的更改。例如,Ant对Java11的支持。