对于使用 jpackage 构建的应用程序,LSOpenURLsWithRole() 失败并出现错误 -10810
LSOpenURLsWithRole() failed with error -10810 for an application built with jpackage
不久前我用 jpackage 构建了我的应用程序安装程序。
我在我的开发机器(macos 版本 10.15.2)和另一台稍旧的机器(macos 版本 10.12.6)上测试了它。在两台机器上程序 运行 完美。
自上次测试以来,我的程序有所改进,我想重复此部署测试。在我的开发机器上,一切都按预期进行,而在另一台机器上,我现在收到此消息:
“文件 /Applications/myApplication.app. 的 LSOpenURLsWithRole() 失败,错误为 -10810。”
我能找到的唯一痕迹(在 /var/log/system.log 中)是这样的:
“7 月 23 日 12:03:29 iMac com.apple.xpc.launchd 1 (com.myAppPackage.main.24860 [4219]):服务退出并出现异常代码:1”
这对我来说意义不大。
一开始我假设问题的原因是新代码,我尝试通过简化越来越多的代码来进行跟踪测试,直到最终得出比第一次正确执行的那个。但仍然是同样的情况,在我的机器上应用程序启动没有问题,而在另一台机器上有这个错误 -10810.
另一方面,如果我在第二台机器上 运行 jar 文件 运行 一切正常。
我不知道第二台机器上是否发生了任何变化,但现在我觉得我用 jpackage 构建的所有东西都拒绝在那台机器上 运行。我也有一种感觉,Java 代码甚至没有 运行ning 或者没有引起问题。
暂时没有阻塞,但如果没有解决方案,继续下去有点令人担忧。
如果有人有关于如何调查的想法甚至信息,我欢迎他们。
这里有一个重现的例子:
主class和JavaFxwindow(无包)
public class MainApp {
private static MainApp singleton;
public static void main(String[] args) {
singleton = new MainApp();
BootLogs.inition(args, singleton);
}
public void bootInit() {
BootLogs.addText("Enter main().");
}
}
import java.io.PrintWriter;
import java.io.StringWriter;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class BootLogs extends Application {
private static MainApp mainApp;
private static BootLogs singleton;
private VBox messageVbox = new VBox();
private TextArea txtArea = new TextArea();
public static void inition(final String[] args, final MainApp mainApp) {
BootLogs.mainApp = mainApp;
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
singleton = this;
stage.setTitle("Boot logs");
StackPane root = new StackPane();
root.setStyle("-fx-border-width: 30;-fx-border-color: gray;");
root.getChildren().add(messageVbox);
messageVbox.getChildren().add(txtArea);
VBox.setVgrow(txtArea, Priority.ALWAYS);
txtArea.setEditable(false);
stage.setScene(new Scene(root, 450, 450));
stage.centerOnScreen();
messageVbox.setVisible(true);
Platform.setImplicitExit(true);
Platform.runLater(() -> mainApp.bootInit());
stage.show();
}
public static void addText(String txt) {
singleton.txtArea.setText(singleton.txtArea.getText() + "\n" + txt);
}
public static void addText(String txt, Throwable e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
singleton.txtArea.setText(singleton.txtArea.getText() + "\n" + txt + pw.toString() + "\n");
}
}
build.gradle 文件:
plugins {
// Apply the java-library plugin for API and implementation separation.
id 'java-library'
id 'eclipse'
//Plugin javafx.
id 'org.openjfx.javafxplugin' version '0.0.10'
}
repositories {
// Use JCenter for resolving dependencies.
jcenter()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.2")
}
javafx {
version = "11"
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.swing' ]
}
tasks.named('jar') {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
inputs.files( configurations.runtimeClasspath )
manifest {
attributes('Implementation-Title': project.name,
'Implementation-Version': '1.0',
'Main-Class': 'MainApp')
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
jpackage选项(eclipse项目名称为ZD):
/Library/Java/JavaVirtualMachines/zulu15.32.15-ca-jdk15.0.3-macosx_x64/zulu-15.jdk/Contents/Home/bin/jpackage \
-i /Users/ ... /ZD/external_resources \
-n AppTest \
--main-class MainApp \
--main-jar /Users/ ... /ZD/app/build/libs/app.jar \
--icon /Users/ ... /ZDInstaller/AnyConv.com__graou_logo_77_66_0.icns
两台机器上MainApp的安装都没有问题。
这是在我的机器上启动的应用程序:
但在另一台机器上(我也测试了此处显示的示例)仍然存在错误-10810。我提醒您,3 到 4 周前,简单代码的工作效率要低得多。
我不知道这是否是最好的解决方案,但我想我已经找到了解决方案。
从 10.15 版 macos 中使用 jpackage 创建的“.dmg”安装的可执行文件适用于此 10.15 版,但不适用于 10.12 版。
事实证明,反之亦然:从 macos 10.12 版本中使用 jpackage 创建的“.dmg”安装的可执行文件适用于版本 10.12,但不适用于版本 10.15。
即使我没有检查过其他版本,可执行文件很有可能在 macos 版本中运行,您必须在同一 macos 版本中通过 jpackage 构建“.dmg”。
不久前我用 jpackage 构建了我的应用程序安装程序。
我在我的开发机器(macos 版本 10.15.2)和另一台稍旧的机器(macos 版本 10.12.6)上测试了它。在两台机器上程序 运行 完美。
自上次测试以来,我的程序有所改进,我想重复此部署测试。在我的开发机器上,一切都按预期进行,而在另一台机器上,我现在收到此消息:
“文件 /Applications/myApplication.app. 的 LSOpenURLsWithRole() 失败,错误为 -10810。”
我能找到的唯一痕迹(在 /var/log/system.log 中)是这样的: “7 月 23 日 12:03:29 iMac com.apple.xpc.launchd 1 (com.myAppPackage.main.24860 [4219]):服务退出并出现异常代码:1”
这对我来说意义不大。
一开始我假设问题的原因是新代码,我尝试通过简化越来越多的代码来进行跟踪测试,直到最终得出比第一次正确执行的那个。但仍然是同样的情况,在我的机器上应用程序启动没有问题,而在另一台机器上有这个错误 -10810.
另一方面,如果我在第二台机器上 运行 jar 文件 运行 一切正常。
我不知道第二台机器上是否发生了任何变化,但现在我觉得我用 jpackage 构建的所有东西都拒绝在那台机器上 运行。我也有一种感觉,Java 代码甚至没有 运行ning 或者没有引起问题。
暂时没有阻塞,但如果没有解决方案,继续下去有点令人担忧。
如果有人有关于如何调查的想法甚至信息,我欢迎他们。
这里有一个重现的例子:
主class和JavaFxwindow(无包)
public class MainApp {
private static MainApp singleton;
public static void main(String[] args) {
singleton = new MainApp();
BootLogs.inition(args, singleton);
}
public void bootInit() {
BootLogs.addText("Enter main().");
}
}
import java.io.PrintWriter;
import java.io.StringWriter;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class BootLogs extends Application {
private static MainApp mainApp;
private static BootLogs singleton;
private VBox messageVbox = new VBox();
private TextArea txtArea = new TextArea();
public static void inition(final String[] args, final MainApp mainApp) {
BootLogs.mainApp = mainApp;
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
singleton = this;
stage.setTitle("Boot logs");
StackPane root = new StackPane();
root.setStyle("-fx-border-width: 30;-fx-border-color: gray;");
root.getChildren().add(messageVbox);
messageVbox.getChildren().add(txtArea);
VBox.setVgrow(txtArea, Priority.ALWAYS);
txtArea.setEditable(false);
stage.setScene(new Scene(root, 450, 450));
stage.centerOnScreen();
messageVbox.setVisible(true);
Platform.setImplicitExit(true);
Platform.runLater(() -> mainApp.bootInit());
stage.show();
}
public static void addText(String txt) {
singleton.txtArea.setText(singleton.txtArea.getText() + "\n" + txt);
}
public static void addText(String txt, Throwable e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
singleton.txtArea.setText(singleton.txtArea.getText() + "\n" + txt + pw.toString() + "\n");
}
}
build.gradle 文件:
plugins {
// Apply the java-library plugin for API and implementation separation.
id 'java-library'
id 'eclipse'
//Plugin javafx.
id 'org.openjfx.javafxplugin' version '0.0.10'
}
repositories {
// Use JCenter for resolving dependencies.
jcenter()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.2")
}
javafx {
version = "11"
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.swing' ]
}
tasks.named('jar') {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
inputs.files( configurations.runtimeClasspath )
manifest {
attributes('Implementation-Title': project.name,
'Implementation-Version': '1.0',
'Main-Class': 'MainApp')
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
jpackage选项(eclipse项目名称为ZD):
/Library/Java/JavaVirtualMachines/zulu15.32.15-ca-jdk15.0.3-macosx_x64/zulu-15.jdk/Contents/Home/bin/jpackage \
-i /Users/ ... /ZD/external_resources \
-n AppTest \
--main-class MainApp \
--main-jar /Users/ ... /ZD/app/build/libs/app.jar \
--icon /Users/ ... /ZDInstaller/AnyConv.com__graou_logo_77_66_0.icns
两台机器上MainApp的安装都没有问题。
这是在我的机器上启动的应用程序:
但在另一台机器上(我也测试了此处显示的示例)仍然存在错误-10810。我提醒您,3 到 4 周前,简单代码的工作效率要低得多。
我不知道这是否是最好的解决方案,但我想我已经找到了解决方案。
从 10.15 版 macos 中使用 jpackage 创建的“.dmg”安装的可执行文件适用于此 10.15 版,但不适用于 10.12 版。 事实证明,反之亦然:从 macos 10.12 版本中使用 jpackage 创建的“.dmg”安装的可执行文件适用于版本 10.12,但不适用于版本 10.15。
即使我没有检查过其他版本,可执行文件很有可能在 macos 版本中运行,您必须在同一 macos 版本中通过 jpackage 构建“.dmg”。