我创建了一个Perl模块,以提供与RNG处理Java库Jing的接口。代码位于here。我使用[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)
目前我使用开始块加载jar来编辑CLASSPATH
变量:
BEGIN{
use Env::Path;
my $classpath = Env::Path->CLASSPATH;
$classpath->Append(path(dist_dir('XML-Jing'),'jing.jar'));
}
使用jarsigner
,我验证了dzil release
创建的构建文件夹中的jar已损坏,但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
在我的共享目录中使用了一个jar,而dzil build
却没有。谁能告诉我我需要做些什么来使这个模块正常工作?
答案 0 :(得分:2)
这是一个错误。这种情况经常发生,而且在dzil之前发生过。
Dist-Zilla-4.300034\lib\Dist\Zilla\Dist\Builder.pm
第388行
用open my $fh, '<', $filename;
open my $fh, '<:raw', $filename;
答案 1 :(得分:1)
基于错误消息“jing.jar;无效的END标题(错误的中心目录偏移量)”我可以得出的结果可能是jing.jar已损坏的情况。我建议你再次下载jing.jar文件,然后尝试将它放在CLASS_PATH上。 以下是您可以从中下载jing的链接
http://jing-trang.googlecode.com/files/jing-20091111.zip
由于