相关疑难解决方法(0)

如何使用JRE部署JavaFX 11 Desktop应用程序

我有一个JavaFX(JDK 8)桌面业务应用程序,它使用Java Web Start进行部署.用户安装了Java 8,他们只需转到URL(我的AWS Linux服务器上的公共URL),然后下载/启动应用程序(使用Web Start).我也可以通过将新JAR部署到服务器来轻松更新应用程序.一切都很好.

但是,Oracle已经停止了使用Java 11的Web Start,并且在2018年3月的"Java客户端路线图更新"白皮书中,他们建议将JRE与应用程序捆绑在一起("应用程序的概念是从独立的JRE单独分发的,因此,快速消退.").我不能依赖我的用户留在Java 8 for Web Start,即使他们仍然保持在8,Oracle也需要许可才能继续使用Java 8(我没有,可能非常昂贵,我更喜欢无论如何与社区一起走向JavaFX 11和OpenJDK).


我想迁移到JavaFX 11.我遵循OpenJFX的"JavaFX11入门"(https://openjfx.io/openjfx-docs/),使用OpenJDK 11.0.1和Gluon的JavaFX SDK 11.0.1(在Netbeans 10vc2上) ),并且已经能够运行示例应用程序(在我看来,我应该能够非常轻松地将我的JavaFX 8代码移植到JavaFX 11).

然而,这是我被困在方向的地方.如何将其与JRE捆绑在一起并将其部署到我的最终用户(并提供应用程序更新)?那里有一个简单的方法(甚至是艰难的方式,有一些方向/指南)?

我可以花几百个小时在JavaFX 11中编写富有表现力,丰富且有用的桌面业务应用程序,但我该怎么做呢?

部署工具包(如JWrapper,InstallAnywhere等)是否适合Java 11的这个新时代?Gluon/openjfx.io可能有我错过的推荐或指南吗?我似乎无法从信誉良好的来源找到任何建议或指南,因为我们开发人员如何专注于编写前端代码,以便部署应用程序.

感谢您的帮助或指导.

java javafx openjfx javafx-11

21
推荐指数
1
解决办法
7009
查看次数

Java 11 JLink 获取错误:自动模块不能与 jlink 一起使用:来自文件的 com.microsoft.sqlserver.jdbc

我正在尝试使用 Java 11 将 JDBC 连接器模块添加到我的项目中。我下载了用于 Java 11 的 MSSqlServer JDBC 驱动程序 7.2

https://www.microsoft.com/en-us/download/details.aspx?id=57782

我添加了模块:

requires com.microsoft.sqlserver.jdbc;
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试清理+构建时,NetBeans 告诉我:

Error: automatic module cannot be used with jlink: com.microsoft.sqlserver.jdbc from file: /sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar
Run Code Online (Sandbox Code Playgroud)

我很确定这是因为 jar 没有编译的module-info.java. 但是,我想知道是否有办法在那里注入一个?

java jdbc jlink

14
推荐指数
1
解决办法
4200
查看次数

Java 9:使用第三方jar生成JLink的运行时映像

我想创建一个包含第三方jar的Java 9运行时映像.我创建了一个简单的Java项目(让我们称之为Example)来调用实用程序jar(让我们调用它ExampleUtil.jar).Example包含module-info.javasrc目录中并在Eclipse中运行良好(我已添加ExampleUtil.jar为模块依赖项).如果我打电话:

jlink -v
    --module-path "C:\Program Files\Java\jdk-9.0.4\jmods";C:\Temp
    --add-modules com.example.steven
    --output C:\Temp\image.steven
    --launcher launch=com.example.steven/com.example.steven`
Run Code Online (Sandbox Code Playgroud)

...我收到错误消息:

错误:找不到ExampleUtil模块的module-info.class

有没有办法使用非模块的jar创建运行时映像?谢谢.

java jlink java-9

7
推荐指数
1
解决办法
3086
查看次数

在java 9中使用jdeps为自动模块创建module-info

我有3罐杰克逊图书馆

  1. 杰克逊核心2.8.10.jar
  2. 杰克逊的注解 - 2.8.0.jar
  3. 杰克逊 - 数据绑定,2.8.10.jar

我成功地为core和annotation创建了module-info.java,并使用jdeps将它们转换为Named maodule.

对于数据绑定,我尝试了以下命令:

jdeps --generate-module-info.--module-path%JAVA_HOME%\ jomds; jackson.core; jackson.annotations existingmods\jackson-databind-2.8.10.jar

现在发生以下错误:

Missing dependence: .\jackson.databind\module-info.java not generated
Error: missing dependencies
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator       not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator$Mode  not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat        not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat$Value  not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value not found.
Run Code Online (Sandbox Code Playgroud)

如何为jackson-databind生成module-info.java?

jar java-9 jdeps java-module

6
推荐指数
1
解决办法
6275
查看次数

如何使用javapackager查找自动模块

我正在捆绑一个app,javapackager其中主jar是一个带有module-info.class的模块,但它依赖于许多其他普通旧jar的jar,所以我把它们称为module-info.java中的自动模块.然而,javapackager抱怨无法找到它们.如何让它找到自动模块的jar文件?

Exception: jdk.tools.jlink.plugin.PluginException: java.lang.module.FindException: Module rcf not found, required by com.username.commander.ui
Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "Mac Application Image" (mac.app) failed to produce a bundle.
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)
Run Code Online (Sandbox Code Playgroud)

我已经尝试指定模块路径(第一个dir只有主模块jar,第二个dir有所有非模块jar):

/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/javapackager -deploy -native image \
-name Commander -title Commander -vendor "username" \
--module-path /Users/username/Dropbox/coding/commander/Commander-java/moduleJars:/Users/username/Dropbox/coding/commander/Commander-java/packageJars \
--module com.username.commander.ui/com.username.commander.ui.AppWindow \
-srcdir /Users/username/Dropbox/coding/commander/Commander-java/packageJars \
-outdir /Users/username/Dropbox/coding/commander/Commander-java/target \
-outfile Commander \
-Bruntime=target/jre-9.0.1 -Bicon=src/main/resources/icons/commander.icns \
-BappVersion=1.0 \
-Bmac.CFBundleIdentifier=com.username.Commander \
--add-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
--limit-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
-nosign -v
Run Code Online (Sandbox Code Playgroud)

java java-9 javapackager

5
推荐指数
2
解决办法
1433
查看次数

有没有办法在使用maven-jlink-plugin时添加maven依赖项?

我正在使用这个Github项目来接触Java 9中的新模块化功能.我想为项目添加依赖项并能够构建本机映像.但是,当我尝试向pom.xml添加新的依赖项,并将requires语句添加到module-info.java时,我从maven-jlink-plugin中收到以下错误:

Error: module-info.class not found for joda.time module
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用它作为概念证明,我可以使用新的链接阶段部署图像,但自然我需要能够具有外部依赖性,我需要使用maven(工作约束).

对mod-jar/pom.xml的更改

...
 <dependencies>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.9</version>
    </dependency>
  </dependencies>
...
Run Code Online (Sandbox Code Playgroud)

MOD-罐/ module-info.java

module com.soebes.nine.jar {
  requires java.base;
  requires joda.time;
  exports com.soebes.example.nine.jar;
}
Run Code Online (Sandbox Code Playgroud)

日志:

[INFO] --- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ mod-jlink ---
[INFO] Toolchain in maven-jlink-plugin: jlink [ /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/jlink ]
[INFO] The following dependencies will be linked into the runtime image:
[INFO]  -> module: com.soebes.nine.one ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-1/target/jmods/com.soebes.nine.one.jmod )
[INFO]  -> module: com.soebes.nine.two ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-2/target/jmods/com.soebes.nine.two.jmod )
[INFO]  -> module: com.soebes.nine.jar ( …
Run Code Online (Sandbox Code Playgroud)

java jodatime jlink maven java-9

5
推荐指数
2
解决办法
2190
查看次数

java 9 第三方模块适用于 IDE,但不适用于 jlink

该程序基于JDK 9(JPMS),使用IDE(Intellij)时使用一些第三方jar,如Apache(poi-3.17.jar,commons-io-2.6.jar)和HikariCP(HikariCP-3.1.0.jar) ) 我“需要”它们并且程序运行良好。当我尝试使用 java9 'jlink' 获取自定义 JRE 时,我得到以下信息:

/out$ jlink --module-path production --add-modules  
studyModule,java.base,java.datatransfer,java.desktop,java.logging,
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for com.zaxxer.hikari module

/out$ jlink --module-path production --add-modules   
studyModule,java.base,java.datatransfer,java.desktop,java.logging,   
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for poi module
Run Code Online (Sandbox Code Playgroud)

问题是:为什么那些带有 IDE 的包可以正常工作?如果它们没有被模块化,那么也不应该在 IDE 中工作。

PS:在使用 jlink 时,我将这些 jars 添加到“root”文件夹中。

java jlink apache-poi hikaricp java-9

5
推荐指数
1
解决办法
824
查看次数

使用 JavaFX 和 maven 将模块描述符添加到库中

我需要在带有 JavaFX 的 maven 项目中使用反射,我想用它jlink来捆绑最小的 JRE。

问题是我在运行时收到以下错误mvn clean compile javafx:jlink

[WARNING] Required filename-based automodules detected. Please don't publish this project to a public artifact repository!
Error: automatic module cannot be used with jlink: reflections from file:///C:/Users/Daniel/.m2/repository/org/reflections/reflections/0.9.12/reflections-0.9.12.jar
[ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:504)
    at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:394)
    at org.openjfx.JavaFXJLinkMojo.execute (JavaFXJLinkMojo.java:187)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) …
Run Code Online (Sandbox Code Playgroud)

java javafx jlink maven java-platform-module-system

5
推荐指数
1
解决办法
212
查看次数

如何创建 module-info 类文件并将其添加到 jar 中?

我正在开发一个 javafx 项目,我需要module-info.class自己生成文件。所以,我想知道如何正确地做到这一点并使其与 Maven 一起工作。

我在使用 QRCode 生成器库时面临这个问题zxing。我在 java 中找不到带有 module-info.class 文件的任何替代 Qr 生成器库,如果有的话请提及。

我必须这样做,因为我使用 jlink 会抛出“自动模块不能与 jlink 一起使用”错误。

简短的解释会非常有帮助:)

注意:我尝试使用工具注入模块文件,但它抛出错误:无法读取 jar

java javafx jlink zxing module-info

2
推荐指数
1
解决办法
249
查看次数