Perl:从Java .jar文件中读取MANIFEST.MF文件

时间:2010-06-30 12:24:39

标签: perl jar header zip manifest

我正在试图弄清楚如何从perl中的java jar文件中读取META-INF / MANIFEST.MF文件。我正在尝试使用Mail::Header来分隔清单中的属性。如果已经从jar中提取了清单文件,这可以正常工作,但我正在试图找出如何将清单提取到内存中然后立即放入Header对象。这就是我到目前为止所做的:

my $jarFile = "MyJar.jar";
my &jar = Archive::Zip->new($jarFile);

my $manifest = Archive::Zip::MemberRead->new($jar, "META-INF/MANIFEST.MF");

my $header = Mail::Header->new;
$header->read(????);

print $header->get("Class-Path");

我无法弄清楚使用哪个构造函数和/或哪个提取/读取函数来读取$ manifest文件句柄。 (我是perl的新手)

1 个答案:

答案 0 :(得分:1)

MemberRead有一个非常愚蠢的API。它应该以兼容的方式提供真实句柄,或者至少模仿IO::File(因此我们将其传递给Mail::Header构造函数或者至少能够调用{{ 3}}),但不是。

我们可以通过将文件内容临时存储在数组中来解决其不兼容问题。

my @lines;
{
    my $handle = Archive::Zip->new($jar_file)->memberNamed('META-INF/MANIFEST.MF')->readFileHandle;
    while (defined(my $line = $handle->getline)) { # even $_ doesn't work!! what a piece of camel dung
        push @lines, $line;
    }
}

my $headers = Mail::Header->new([@lines]);
print $headers->get('Class-Path');