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

时间:2010-09-29 19:07:36

标签: java class jar scons

我总共有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;}  
};

3 个答案:

答案 0 :(得分:2)

您需要将JAVAVERSION='1.6'作为参数添加到env.Java()来电:

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

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

答案 1 :(得分:1)

您可以传递目录,而不是将完整的类文件列表传递给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”开头。

答案 2 :(得分:0)

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

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

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