Launch4J 无法识别 Eclipse Temurin OpenJDK Java 17

问题描述 投票:0回答:3

我使用的是 Windows 10,并且安装了 Java 17,且

JAVA_HOME
设置正确。
java --version
给出了这个:

openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)

在 Maven 父 POM 中,我通过

launch4j-maven-plugin
2.1.1 配置了 Launch4j,以使用我当前的 JRE 生成 EXE:

<plugin>
  <groupId>com.akathist.maven.plugins.launch4j</groupId>
  <artifactId>launch4j-maven-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <id>generate-exe</id>
      <phase>package</phase>
      <goals>
        <goal>launch4j</goal>
      </goals>
      <configuration>
      ...
      <jre>
        <minVersion>${maven.compiler.release}</minVersion>
      </jre>
...

这个父 POM 还指定了 Java 8(尽管它需要 Java 9+ 来构建):

<properties>
  <maven.compiler.release>8</maven.compiler.release>
...

我的 CLI 项目 POM 使用上面的父 POM。我构建 Maven 项目没有任何问题,并且它生成了

my-cli.exe
。我可以跑
my-cli.exe
很好。

但我想在 My CLI 中使用 Java 17,这应该没问题,因为我安装了 Java 17。所以我在 My ClI 项目中设置了以下内容:

<properties>
  <maven.compiler.release>17</maven.compiler.release>
...

我清理并重建项目,它像以前一样输出

my-cli.exe
。但是当我尝试运行
my-cli.exe
时,它会打印:

My CLI: This application requires a Java Runtime Environment 17

然后它会打开我的浏览器到

https://java.com/en/download/

Launch4J Bug 197 来看,Launch4J 似乎并不查看

JAVA_HOME
环境变量,而是查看 Windows 注册表。这意味着它会忽略任何手动安装的 JDK。 😞 所以我去了 Adoptium 并使用安装程序安装了最新版本
OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.msi
。在我的 Windows 安装程序中,它显示“Eclipse Temurin JDK with Hotspot 17.0.2+8 (x64)。不幸的是,同样的事情发生了;Launch4J 仍然无法识别它。

为什么 Launch4J 无法识别 OpenJDK 17.0.2+8 是“Java 运行时环境 17”?

java maven launch4j
3个回答
0
投票

Launch4j 文档

<path>
元素描述了解决方案:

...可以使用 JAVA_HOME 或 PATH 用于搜索已安装的运行时的环境变量 无需添加用于搜索 JRE 的注册表项。

因此只需将

path
元素添加到您的
launch4j-maven-plugin
配置中即可:

<plugin>
  <groupId>com.akathist.maven.plugins.launch4j</groupId>
  <artifactId>launch4j-maven-plugin</artifactId>
  <version>2.1.2</version>
    <executions>
      <execution>
        ...
        <configuration>
          ...
          <jre>
            <path>%JAVA_HOME%;%PATH%</path>

0
投票

显然根据Launch4J 功能请求 103,Launch4J 不会查看 OpenJDK 使用的相同注册表项,并且仅适用于 Oracle JDK 注册表项。有一个 Adoptium Issue 64 要求 Adoptium 使用与 Oracle 相同的注册表项,但看起来由于陷阱而被放弃。

如上面的功能请求中所述,Launch4J 无论如何都应该查看

JAVA_HOME
环境。在对 Launch4J Bug 197 进行更广泛的讨论之后,我发现现在可以指定搜索路径以包含
%JAVA_HOME%
,使用类似的内容,如 Ilya 的答案中所述:

<jre>
  <path>%JAVA_HOME%;%PATH%</path>
</jre>

如果没有找到 JDK,也可以将启动的 URL 更改为更有用的内容,或者(可能更适合 CLI 程序)将其完全删除。请阅读 Launch4J Bug 197 了解更多详细信息。


0
投票

我遇到了类似的问题(maven 插件版本 2.5,Java17/Liberica Bellsoft),无法找到 JRE - 虽然它就在那里 -。

最后使用

--l4j-debug-all
选项,我看到找到了JRE目录,但未正确检测到java的
-version
输出。

作为解决方法,我禁用了位级别和版本

<jre>
    <path>${project.jre.version}</path>
    <!--requires64Bit>true</requires64Bit-->
    <!--minVersion>17.0.10</minVersion-->
    <requiresJdk>false</requiresJdk>
</jre>
© www.soinside.com 2019 - 2024. All rights reserved.