Дзил релиз Клобберс Jar File

Я создал модуль Perl для обеспечения интерфейса с библиотекой Java Jing для обработки ГСЧ. Код находится здесь. я использую [Inline::Java][3] скомпилировать и загрузить небольшой класс, который использует jing.jarоба расположены в java каталог, который используется совместно [File::ShareDir][4], Бег prove -vl или же dzil test, модуль работает отлично, и все тесты проходят:

>prove -vl
t\0-use.t .............
1..1
ok 1 - use XML::Jing;
ok
t\01-validates_xml.t ..
1..3
ok 1 - successfully reads a valid RNG
ok 2 - returns nothing when XML file is valid
ok 3
ok
t\02-exceptions.t .....
1..5
ok 1 - warning for nonexistent RNG file
ok 2 - constructor returns nothing for non-existent RNG file
ok 3 - warning for bad RNG file
ok 4 - constructor returns nothing for bad RNG file
ok 5 - warning for nonexistent XML file
ok
All tests successful.
Files=3, Tests=9,  6 wallclock secs ( 0.11 usr +  0.05 sys =  0.16 CPU)
Result: PASS

Тесты также проходят при создании дистрибутива с использованием dzil build:

dzil build
cd XML-Jing-0.x
perl Build.PL
build
build test

Однако, используя dzil release, Inline::Java квакает, когда пытается загрузить jing.jar. Мы получаем эти сумасшедшие ошибки ниже:

BEGIN failed--compilation aborted at t/01-validates_xml.t line 5.
t/01-validates_xml.t ..........
Dubious, test returned 1 (wstat 256, 0x100)
No subtests run

A problem was encountered while attempting to compile and install your InlineJava code. The command that failed was:
  "C:\Program Files\Java\jdk1.7.0_21\bin\javac.exe" -deprecation  -d "C:\strawberry\cpan\build\XML-Jing-0.01-Skydfp\_Inline\lib\auto\XML\Jing_706b" RNGValidator.java > cmd.out 2>&1

The build directory was:
C:\strawberry\cpan\build\XML-Jing-0.01-Skydfp\_Inline\build\XML\Jing_706b

The error message was:
error: error reading C:\strawberry\cpan\build\XML-Jing-0.01-Skydfp\blib\lib\auto\share\dist\XML-Jing\jing.jar; invalid END header (bad central directory offset)

В настоящее время я загружаю банку, используя начальный блок для редактирования CLASSPATH переменная:

BEGIN{
    use Env::Path;
    my $classpath = Env::Path->CLASSPATH;
    $classpath->Append(path(dist_dir('XML-Jing'),'jing.jar'));
}

С помощью jarsignerЯ проверил, что jar поврежден в папке сборки, созданной dzil release но не в том, который создан dzil build:

В сборке, созданной с помощью dzil build:

jarsigner -verify java/jing.jar
jar is unsigned. (signatures missing or not parsable)

В сборке, созданной с помощью dzil release:

jarsigner -verify java/jing.jar
jarsigner: java.util.zip.ZipException: invalid END header (bad central directory offset)

Подвести итоги, dzil release забивает банку в моем общем каталоге, в то время как dzil build не. Может кто-нибудь сказать мне, что мне нужно сделать, чтобы этот модуль работал правильно?

2 ответа

Решение

Это ошибка. Вид, который часто случается и случался раньше в Дзиле.
Dist-Zilla-4.300034\lib\Dist\Zilla\Dist\Builder.pm линия 388
замещать open my $fh, '<', $filename; с open my $fh, '<:raw', $filename;

Основываясь на сообщении об ошибке "jing.jar; неверный заголовок END (неправильное смещение центрального каталога)", я могу понять, что это может быть причиной повреждения jing.jar. Я бы посоветовал вам снова загрузить файл jing.jar, а затем попробовать поместить его в CLASS_PATH. Ниже приведена одна ссылка, откуда вы можете скачать Jing

http://jing-trang.googlecode.com/files/jing-20091111.zip

Спасибо

Другие вопросы по тегам