运行 来自命令行的 jar 时的 ClassNotFoundException
The ClassNotFoundException when running a jar from command line
我不确定这个 jar 文件中缺少什么,但是当我尝试从命令行 运行 jar 时,它无法加载主入口点:
这是包含我的应用程序的 classes 和资源的目录。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx\mavenfxedittableview
09/04/2020 08:48 PM <DIR> .
09/04/2020 08:48 PM <DIR> ..
09/03/2020 04:24 PM 2,502 addressBookData.xml
09/02/2020 05:52 PM 9,562 Address_Book.png
09/02/2020 05:52 PM 859 birthdaystatistic.fxml
09/02/2020 05:52 PM 3,274 BirthdaystatisticController.class
09/02/2020 05:52 PM 3,224 DarkTheme.css
09/02/2020 05:52 PM 2,072 DateUtil.class
09/02/2020 05:52 PM 1,214 LocalDateAdapter.class
09/02/2020 05:52 PM 3,523 Person.class
09/02/2020 05:52 PM 4,535 personeditdialog.fxml
09/02/2020 05:52 PM 5,128 PersoneditdialogController.class
09/02/2020 05:52 PM 1,029 PersonListWrapper.class
09/02/2020 05:52 PM 6,412 personoverview.fxml
09/02/2020 05:52 PM 1,904 rootlayout.fxml
09/02/2020 05:52 PM 4,490 RootlayoutController.class
09/02/2020 05:52 PM 9,060 TableEditApp.class
09/02/2020 05:52 PM 6,812 TableVieweditController.class
16 File(s) 65,600 bytes
2 Dir(s) 57,686,331,392 bytes free
我为我的应用程序创建了一个 app.jar 并指定了应用程序的主要入口 class。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target
\classes\org\openjfx>jar cvfe app.jar TableEditApp.class -C mavenfxedittableview .
added manifest
adding: addressBookData.xml(in = 2502) (out= 376)(deflated 84%)
adding: Address_Book.png(in = 9562) (out= 9567)(deflated 0%)
adding: birthdaystatistic.fxml(in = 859) (out= 372)(deflated 56%)
adding: BirthdaystatisticController.class(in = 3274) (out= 1544)(deflated 52%)
adding: DarkTheme.css(in = 3224) (out= 826)(deflated 74%)
adding: DateUtil.class(in = 2072) (out= 941)(deflated 54%)
adding: LocalDateAdapter.class(in = 1214) (out= 537)(deflated 55%)
adding: Person.class(in = 3523) (out= 1277)(deflated 63%)
adding: personeditdialog.fxml(in = 4535) (out= 872)(deflated 80%)
adding: PersoneditdialogController.class(in = 5128) (out= 2418)(deflated 52%)
adding: PersonListWrapper.class(in = 1029) (out= 485)(deflated 52%)
adding: personoverview.fxml(in = 6412) (out= 1149)(deflated 82%)
adding: rootlayout.fxml(in = 1904) (out= 542)(deflated 71%)
adding: RootlayoutController.class(in = 4490) (out= 2097)(deflated 53%)
adding: TableVieweditController.class(in = 6812) (out= 2835)(deflated 58%)
app.jar创建成功。这是META-INF/MANIFEST.MF文件的内容。
Manifest-Version: 1.0
Created-By: 14.0.2 (Oracle Corporation)
Main-Class: TableEditApp.class
这是我的 class路径,当前目录为“.”一开始。
.;C:\Users\hrh74\Documents\ABack up\NetBeansProjects\javalearning\build\classes;C:\Program Files\Java\jdk-14.0.2;C:\Program Files\Java\jdk-14.0.2\bin;C:\Program Files (x86)\Java\jre1.8.0_251\bin;C:\Program Files\Java\jdk-14.0.2\lib;
当我列出 jar 文件的内容时,所有 class 都已正确打包在 jar 中。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx>jar tvf app.jar
0 Fri Sep 04 23:22:18 IRDT 2020 META-INF/
98 Fri Sep 04 23:22:18 IRDT 2020 META-INF/MANIFEST.MF
2502 Thu Sep 03 16:24:22 IRDT 2020 addressBookData.xml
9562 Wed Sep 02 17:52:36 IRDT 2020 Address_Book.png
859 Wed Sep 02 17:52:36 IRDT 2020 birthdaystatistic.fxml
3274 Wed Sep 02 17:52:40 IRDT 2020 BirthdaystatisticController.class
3224 Wed Sep 02 17:52:36 IRDT 2020 DarkTheme.css
2072 Wed Sep 02 17:52:40 IRDT 2020 DateUtil.class
1214 Wed Sep 02 17:52:38 IRDT 2020 LocalDateAdapter.class
3523 Wed Sep 02 17:52:38 IRDT 2020 Person.class
4535 Wed Sep 02 17:52:36 IRDT 2020 personeditdialog.fxml
5128 Wed Sep 02 17:52:40 IRDT 2020 PersoneditdialogController.class
1029 Wed Sep 02 17:52:40 IRDT 2020 PersonListWrapper.class
6412 Wed Sep 02 17:52:36 IRDT 2020 personoverview.fxml
1904 Wed Sep 02 17:52:36 IRDT 2020 rootlayout.fxml
4490 Wed Sep 02 17:52:38 IRDT 2020 RootlayoutController.class
9060 Wed Sep 02 17:52:38 IRDT 2020 TableEditApp.class
6812 Wed Sep 02 17:52:38 IRDT 2020 TableVieweditController.class
最后,当我从命令行使用 java –jar app.jar 运行 应用程序时,我得到了 ClassNotFoundException。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx>java -jar app.jar
Error: Could not find or load main class TableEditApp.class
Caused by: java.lang.ClassNotFoundException: TableEditApp.class
据我所知,我尽量遵守规范,所以我不确定为什么这不起作用。任何想法,可能导致此异常的原因是什么?
提前致谢。
关于我在上一条评论中提到的 HelloWorld.java,我发现了一些有趣的事情。我放弃了使用“jar cvfe”,而是创建了一个文件名 mymanifest.txt,并将 class 的名称与主条目放在一起,如“Main-Class: org.me.HelloWorld”,然后是两个空行(根据规格)。我使用“jar cvmf”而不是“jar cvfe”打包了 jar,它运行良好。然后我将相同的方法应用于我的应用程序 jar 创建,现在我收到链接错误而不是 ClassNotFoundException。也许,它与我必须深入研究的 JavaFX 库有关。总之,我怀疑“jar cvfe”开关可能无法按照 Java 教程中的描述工作。我在过去的教程中发现过错误,这可能是另一个错误。
无论如何,谢谢大家的评论。
我不确定这个 jar 文件中缺少什么,但是当我尝试从命令行 运行 jar 时,它无法加载主入口点:
这是包含我的应用程序的 classes 和资源的目录。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx\mavenfxedittableview
09/04/2020 08:48 PM <DIR> .
09/04/2020 08:48 PM <DIR> ..
09/03/2020 04:24 PM 2,502 addressBookData.xml
09/02/2020 05:52 PM 9,562 Address_Book.png
09/02/2020 05:52 PM 859 birthdaystatistic.fxml
09/02/2020 05:52 PM 3,274 BirthdaystatisticController.class
09/02/2020 05:52 PM 3,224 DarkTheme.css
09/02/2020 05:52 PM 2,072 DateUtil.class
09/02/2020 05:52 PM 1,214 LocalDateAdapter.class
09/02/2020 05:52 PM 3,523 Person.class
09/02/2020 05:52 PM 4,535 personeditdialog.fxml
09/02/2020 05:52 PM 5,128 PersoneditdialogController.class
09/02/2020 05:52 PM 1,029 PersonListWrapper.class
09/02/2020 05:52 PM 6,412 personoverview.fxml
09/02/2020 05:52 PM 1,904 rootlayout.fxml
09/02/2020 05:52 PM 4,490 RootlayoutController.class
09/02/2020 05:52 PM 9,060 TableEditApp.class
09/02/2020 05:52 PM 6,812 TableVieweditController.class
16 File(s) 65,600 bytes
2 Dir(s) 57,686,331,392 bytes free
我为我的应用程序创建了一个 app.jar 并指定了应用程序的主要入口 class。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target
\classes\org\openjfx>jar cvfe app.jar TableEditApp.class -C mavenfxedittableview .
added manifest
adding: addressBookData.xml(in = 2502) (out= 376)(deflated 84%)
adding: Address_Book.png(in = 9562) (out= 9567)(deflated 0%)
adding: birthdaystatistic.fxml(in = 859) (out= 372)(deflated 56%)
adding: BirthdaystatisticController.class(in = 3274) (out= 1544)(deflated 52%)
adding: DarkTheme.css(in = 3224) (out= 826)(deflated 74%)
adding: DateUtil.class(in = 2072) (out= 941)(deflated 54%)
adding: LocalDateAdapter.class(in = 1214) (out= 537)(deflated 55%)
adding: Person.class(in = 3523) (out= 1277)(deflated 63%)
adding: personeditdialog.fxml(in = 4535) (out= 872)(deflated 80%)
adding: PersoneditdialogController.class(in = 5128) (out= 2418)(deflated 52%)
adding: PersonListWrapper.class(in = 1029) (out= 485)(deflated 52%)
adding: personoverview.fxml(in = 6412) (out= 1149)(deflated 82%)
adding: rootlayout.fxml(in = 1904) (out= 542)(deflated 71%)
adding: RootlayoutController.class(in = 4490) (out= 2097)(deflated 53%)
adding: TableVieweditController.class(in = 6812) (out= 2835)(deflated 58%)
app.jar创建成功。这是META-INF/MANIFEST.MF文件的内容。
Manifest-Version: 1.0
Created-By: 14.0.2 (Oracle Corporation)
Main-Class: TableEditApp.class
这是我的 class路径,当前目录为“.”一开始。
.;C:\Users\hrh74\Documents\ABack up\NetBeansProjects\javalearning\build\classes;C:\Program Files\Java\jdk-14.0.2;C:\Program Files\Java\jdk-14.0.2\bin;C:\Program Files (x86)\Java\jre1.8.0_251\bin;C:\Program Files\Java\jdk-14.0.2\lib;
当我列出 jar 文件的内容时,所有 class 都已正确打包在 jar 中。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx>jar tvf app.jar
0 Fri Sep 04 23:22:18 IRDT 2020 META-INF/
98 Fri Sep 04 23:22:18 IRDT 2020 META-INF/MANIFEST.MF
2502 Thu Sep 03 16:24:22 IRDT 2020 addressBookData.xml
9562 Wed Sep 02 17:52:36 IRDT 2020 Address_Book.png
859 Wed Sep 02 17:52:36 IRDT 2020 birthdaystatistic.fxml
3274 Wed Sep 02 17:52:40 IRDT 2020 BirthdaystatisticController.class
3224 Wed Sep 02 17:52:36 IRDT 2020 DarkTheme.css
2072 Wed Sep 02 17:52:40 IRDT 2020 DateUtil.class
1214 Wed Sep 02 17:52:38 IRDT 2020 LocalDateAdapter.class
3523 Wed Sep 02 17:52:38 IRDT 2020 Person.class
4535 Wed Sep 02 17:52:36 IRDT 2020 personeditdialog.fxml
5128 Wed Sep 02 17:52:40 IRDT 2020 PersoneditdialogController.class
1029 Wed Sep 02 17:52:40 IRDT 2020 PersonListWrapper.class
6412 Wed Sep 02 17:52:36 IRDT 2020 personoverview.fxml
1904 Wed Sep 02 17:52:36 IRDT 2020 rootlayout.fxml
4490 Wed Sep 02 17:52:38 IRDT 2020 RootlayoutController.class
9060 Wed Sep 02 17:52:38 IRDT 2020 TableEditApp.class
6812 Wed Sep 02 17:52:38 IRDT 2020 TableVieweditController.class
最后,当我从命令行使用 java –jar app.jar 运行 应用程序时,我得到了 ClassNotFoundException。
C:\Users\hrh74\Documents\ABack up\NetBeansProjects\mavenfxedittableview\target\classes\org\openjfx>java -jar app.jar
Error: Could not find or load main class TableEditApp.class
Caused by: java.lang.ClassNotFoundException: TableEditApp.class
据我所知,我尽量遵守规范,所以我不确定为什么这不起作用。任何想法,可能导致此异常的原因是什么? 提前致谢。
关于我在上一条评论中提到的 HelloWorld.java,我发现了一些有趣的事情。我放弃了使用“jar cvfe”,而是创建了一个文件名 mymanifest.txt,并将 class 的名称与主条目放在一起,如“Main-Class: org.me.HelloWorld”,然后是两个空行(根据规格)。我使用“jar cvmf”而不是“jar cvfe”打包了 jar,它运行良好。然后我将相同的方法应用于我的应用程序 jar 创建,现在我收到链接错误而不是 ClassNotFoundException。也许,它与我必须深入研究的 JavaFX 库有关。总之,我怀疑“jar cvfe”开关可能无法按照 Java 教程中的描述工作。我在过去的教程中发现过错误,这可能是另一个错误。
无论如何,谢谢大家的评论。