Perl: чтение файла MANIFEST.MF из файла Java .jar - PullRequest
1 голос
/ 30 июня 2010

Я пытаюсь понять, как читать файл META-INF / MANIFEST.MF из файла java jar в perl.Я пытаюсь использовать Mail :: 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 Ответ

1 голос
/ 30 июня 2010

MemberRead имеет действительно тупой API.Он должен давать real дескриптор или, по крайней мере, имитировать IO::File совместимым образом (поэтому мы передаем его конструктору Mail::Header или, по крайней мере, сможем вызвать метод getlines), но не.

Мы можем обойти его несовместимость, временно сохранив содержимое файла в массиве.

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');
...