【发布时间】:2021-07-08 03:28:20
【问题描述】:
我使用 Gradle 构建框架构建了我的项目并生成了一个 JAR 文件。但是,在这种情况下,输出 jar 文件无法从主类 (miner.Tracker) 加载主要方法。
正如我所提到的,使用 -jar 选项运行失败。
$ java -jar Backtracker.jar
Error: Could not find or load main class miner.Tracker
我也尝试使用-cp 选项直接运行该类,但失败了。
$ java -cp Backtracker.jar miner.Tracker
Error: Could not find or load main class miner.Tracker
最后,我解压了 jar 文件并从里面调用了这个类。这次成功找到并运行了main方法的类。
$ mkdir classes
$ cd classes
$ classes $ tar xvf ../Backtracker.jar
x META-INF/
x META-INF/MANIFEST.MF
x CHANGELOG.md
x com/
1. ...
classes $ java miner.Tracker
2021-04-12 22:47:48.008 | Logging started
...
这是META-INF/MANIFEST.MF 文件的内容。
Manifest-Version: 1.0
Implementation-Title: BackTracker
Implementation-Version: 1.9.xx
Specification-Title: release
Specification-Version: 1.9.xx
Main-Class: miner.Tracker
我从 Oracle Java 1.8 运行它。
$ java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
感谢您的帮助。
更新:
$ tar tvf Backtracker.jar |grep miner\/Tracker
-rw-r--r-- 0 0 0 2175 Apr 14 20:38 miner/TrackerUtil.class
-rw-r--r-- 0 0 0 40963 Apr 14 20:38 miner/Tracker.class
【问题讨论】:
-
你的包名不完整,能发一下你的app的结构吗?
-
如果你共享jar文件会更容易。
-
认真的吗?您正在共享所有这些信息并完全省略“...”背后的重要内容,即主类在您的目录结构中的什么位置?恕我直言:这是某种谜题或测验吗?你为什么要让每个人都很难帮助你?
-
@code_mechanic Jar 文件包含数以万计的类文件,目录结构有些复杂。至少我可以分享``` $ tar tvf Backtracker.jar |grep miner\/Tracker -rw-r--r-- 0 0 0 2175 Apr 14 20:38 miner/TrackerUtil.class -rw-r--r -- 0 0 0 40963 Apr 14 20:38 miner/Tracker.class ``` 有没有更好的方法来共享目录结构?
-
“Jar 文件包含数以万计的类文件” 为什么不制作一个简单的测试 jar,其中包含一个仅打印“Hello World”的
miner.Tracker类?您不认为排除故障会更容易吗?
标签: java build jar manifest main