b'由于 java.lang.classnotfoundation 错误导致无法找到或加载主类的错误'

vaa*_*lar -1 python java subprocess executable-jar

我正在尝试使用 python 读取可执行 jar 文件。该 jar 文件没有任何 java 文件。它仅包含类和 JSON 文件。

所以我尝试的是

from subprocess import Popen,PIPE

jar_location = C:\\users\app\\my_file.jar"
inputs = C:\\users\\app\my_input.json"

my_data = Popen(["java", "-cp",jar_location,"SOMECLASS.class",inputs])
stdout,stderr = my_data.communicate()
print(stdout,stderr)
Run Code Online (Sandbox Code Playgroud)

我的预期输出是什么,它读取输入(inputs)并将其传递给给定的类方法(someclass.class),它应该为我返回一些响应。

但我得到的实际输出是找不到类文件错误。

类文件仅位于 jar 文件内

我尝试使用 Popen(["java",""-jar",jar_location,inputs]),但没有找到主要清单属性。我可以看到带有基本版本的清单文件。

有人可以帮我如何通过 python 读取这些类文件吗?我必须对 jar 文件内的多个类文件执行相同的操作

cyb*_*ain 5

您不应在 JAR 文件中指定文件名,而应指定类名。尝试用

my_data = Popen(["java", "-cp", jar_location, "SOMECLASS",inputs])
Run Code Online (Sandbox Code Playgroud)

(请省略“.class”扩展名)

您可以在JDK 工具规范集合中找到该java工具(用于执行 jar 文件)的文档作为Java 工具

您使用的概要变体是 java [options] mainclass [args ...],您提供了类路径的选项-cp <classpath>,并且使用 JAR 文件作为类路径中的唯一元素。

请注意,如果 JAR 文件包含 MANIFEST.MF 文件,当您使用 ZIP 工具打开它时,您应该检查它,因为它可能包含更长的类路径,您可能还必须在命令行上指定(如果您不这样做) t 使用该-jar参数。清单并不总是包含用于执行 via 的主类-jar,但仍然可以包含其他重要参数。并且该文件中的值始终被修剪为短行长度,不要对此感到困惑。