Я создал модуль Perl для обеспечения интерфейса с библиотекой Java RNG-обработки Jing. Код не найден here. Я использую [Inline::Java][3]
для компиляции и загрузки небольшого класса, который использует jing.jar
, оба находятся в каталоге java
, который делится через [File::ShareDir][4]
. Бег prove -vl
или dzil test
, модуль работает прекрасно, и тесты все проходят:Dzil Release Clobbers Jar File
>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
, Инлайн :: 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
, я проверил, что баночка поврежден в папке сборки созданный 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
нет. Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы этот модуль работал правильно?
Поскольку я обновил это, может быть на самом деле больше об ошибке на Dist :: Zilla. В этом случае это может быть просто наградой @RJBS или кем-то еще за ее исправление. –