我有一个JavaFX项目,该项目依赖于我在Windows 10上使用Netbeans 12.0和JDK 14.0开发的JAXB API。由于JAXB API从Java SE迁移到JEE,它们驻留在外部javaee-api- Netbeans安装目录中的6.0 jar 文件。我已经设法在IDE中编译并运行该项目,但是,我已经为此项目创建了一个jar,并且试图从Windows命令提示符(IDE外部)运行它。我利用这种宝贵的资源开始使用(https://stackoverflow.com/questions/55652036/how-to-start-javafx-11-application-outside-ide/55653652#55653652),但是我的情况略有不同。 br /> 这是我的模块信息:
module org.openjfx.mavenfxedittableview {
requires javafx.controls;
requires javafx.fxml;
requires java.base;
requires java.prefs;
requires transitive java.xml.bind;
opens org.openjfx.mavenfxedittableview to java.xml.bind, javafx.fxml;
exports org.openjfx.mavenfxedittableview;
}
这是pom.xml中与JAXB相关的依赖项:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
我已将javaee-api-6.0.jar从Netbeans复制到C:\ MyLibs目录,并创建了包含在系统类路径中的系统环境变量:
JAVA_EXT=C:\MyLibs
我用指向主要类的META-INF / MANIFEST.MF破坏了该项目:
Main-Class: org.openjfx.mavenfxedittableview.TableEditApp
这是我的主类中的import语句,它提取JAXB(java.ml.bind):
import javax.xml.bind.JAXBContext;
这是我的jar文件的内容:
0 Tue Sep 08 07:34:02 IRDT 2020 META-INF/
125 Tue Sep 08 07:34:02 IRDT 2020 META-INF/MANIFEST.MF
2502 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/addressBookData.xml
9562 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/Address_Book.png
859 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/birthdaystatistic.fxml
2602 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/BirthdaystatisticController.class
3224 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/DarkTheme.css
1824 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/DateUtil.class
967 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/LocalDateAdapter.class
2962 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/Person.class
4535 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/personeditdialog.fxml
4566 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/PersoneditdialogController.class
839 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/PersonListWrapper.class
6412 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/personoverview.fxml
1904 Sat Sep 05 15:19:46 IRDT 2020 org/openjfx/mavenfxedittableview/rootlayout.fxml
3741 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/RootlayoutController.class
7433 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/TableEditApp.class
5966 Sun Sep 06 18:34:38 IRDT 2020 org/openjfx/mavenfxedittableview/TableVieweditController.class
349 Tue Sep 08 07:34:04 IRDT 2020 module-info.class
这是我用来运行模块的jar文件的Java命令:
java -p "%JAVAFX_HOME%\lib;%JAVA_EXT%;org\openjfx\mavenfxedittableview" -m org.openjfx.mavenfxedittableview
这是系统错误响应:
C:\Users\hrh74\Downloads\Lib\table>java -p "C:\Program Files\java\jFX\javafx-sdk-14.0.2.1\lib;c:\MyLib\;org\openjfx\mavenfxedittableview" -m org.openjfx.mavenfxedittableview
Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.xml.bind not found, required by org.openjfx.mavenfxedittableview
有什么想法,当从命令行运行模块时如何包含一个外部jar文件,以便可以找到它?
jar --file=javaee-api-6.0.jar --describe-module | more
jar文件的模块名称为javee.api,由slaw在注释中准确确定。
No module descriptor found. Derived automatic module.
javaee.api@6.0 automatic
我已使用该模块名称更新了我的module-info文件,但是,我以为实际的javaee-jar-6.0.jar在Netbeans内部库中并且是项目的一部分,因此Netbeans IDE警告它找不到该模块。类路径。
尽管有警告,但项目仍会编译,但是在运行时(在IDE中,而不是在命令提示符下,这是我的目标),在尝试使用JAXB APIS时会显示错误。如果我在module-info的“ opens”语句中用java.xml.bind替换了javaee.api,那么一切都将在IDE中起作用(而不是命令提示符)。
如果我不对module-info文件进行任何修改,只需尝试使用javaee-api-6.0.jar文件的模块名称javaee.api从命令行运行应用程序jar文件:< / p>
java -p "C:\Program Files\java\jFX\javafx-sdk-14.0.2.1\lib;c:\MyLib" --add-modules javafx.controls,javaee.api -jar org\openjfx\mavenfxedittableview\mavenfxedittableview.jar
然后我收到以下答复:
Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules javaee.api and java.xml export package javax.xml.stream.util to module javafx.swt
谢谢。