b'Error 找不到或加载由 java.lang.classnotfoundation 错误引起的主类'



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

所以我尝试的是

from subprocess import Popen,PIPE
jar_location = C:\usersapp\my_file.jar"
inputs = C:\users\appmy_input.json"
my_data = Popen(["java", "-cp",jar_location,"SOMECLASS.class",inputs])
stdout,stderr = my_data.communicate()
print(stdout,stderr)

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

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

类文件只在jar文件中

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

有人能帮我如何通过python读取这些类文件吗?我必须对jar文件中的多个类文件做同样的事情

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

my_data = Popen(["java", "-cp", jar_location, "SOMECLASS",inputs])

(请省略".class"扩展名(

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

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

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

最新更新