繁体   English   中英

“jar”命令何时拒绝将类添加到.jar文件中?

[英]When will the “jar” command refuse to add a class to a .jar file?

我总共有204个班级(大多数班级都是班级班级)。 几个月来,我一直在使用SCons构建正常(SCons只调用jar命令)。

出于某种原因,它停止为特定类添加最后一个内部类。 例如,假设我有以下类:

class1
class2
class3
class4
class5
class6
...
class79
class80

在最后一次改变之前,SCons会把一切都搞好。 但是现在......它特别没有将class80添加到它的jar命令中。 (我在jar命令中看到了class80的遗漏)。

是否存在jar命令忽略某些类的实例?

-----------编辑。 我找到了罪魁祸首。 出于某种原因,这个内部课程无法识别我的SCons!

vehicleFilter = new RowFilter<Object, Object>(){ 
public boolean include(Entry<? extends Object, ? extends Object> entry)                {                                                 
    {return false;}  
};

你需要在你的env.Java()调用中添加JAVAVERSION='1.6'作为参数:

env.Java(target='classes', source='src', JAVAVERSION='1.6')

如果没有这个,如果您使用当前的javac ,SCons将无法确定匿名内部类的正确名称,因此当这些错误的类文件名传递给jar ,它将失败。

您可以传递目录,而不是将完整的类文件列表传递给Jar命令。 这避免了SCons的java解析器的问题,因为SCons将扫描目录中的文件并查找它找到的任何内容。

像下面这样的东西会将“src”中的文件编译到目录“classes”中,然后从“classes”的内容创建一个jar:

env = Environment(tools=['javac', 'jar'])
env.Java(target='classes', source='src')
env.Jar(target='foo.jar', source=['classes', 'Manifest.txt'],
        JARCHDIR='$SOURCE')

清单文件“Manifest.txt”位于项目的根目录中。 唯一的要求是它以文本“Manifest-Version”开头。

SCons可以通过列出jar上的所有类来构造命令行,这可能会变得太长(平台限制或SCons内部的启发式)。

您需要查看SCons包内部以查看发生了什么。

你不只是使用蚂蚁的任何特殊原因?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM