当作为另一个构建器的结果生成java输入时,如何停止SCons重建所有.class文件?

时间:2013-02-18 12:40:55

标签: java scons

作为一个相当复杂的跨平台构建的一部分,我调用了SCons Java构建器。 .java文件* 是从模板自动生成的。它们包含包信息:package com.example.package;并在目录中相应地布局。 src/com/example/package/MyClass.java

SConscript:

# javaSources is the absolute path to each java file i.e src/com/example/package/MyClass.java
# outputClassesPath is classes/
JavaArtifacts = env.Java(target = outputClassesPath, source = javaSources)

第一次调用scons正确构建MyClass.java并将输出放入classes/com/example/package/MyClass.class

如果我再次调用scons - 没有任何更改 - 再次运行javac命令。使用scons --debug=explain我得到:

scons: building 'classes/MyClass.class' because it doesn't exist

这是真的 - 但classes/com/example/package/MyClass.class确实存在!

这看起来像SCons中的一个错误。似乎SCons正确地在正确的位置创建.class文件,但它的第一遍似乎并不知道这个正确的位置。

更新:Java文件由模板引擎创建(使用env.Command模式调用)。模板引擎返回的工件测试为.is_derived()的True。看起来这会导致java发射器忽略包目录结构,但我想不出原因。也许我需要为模板创建完整的构建器,停止使用Command,并覆盖.is_derived()的默认值。或者我可以创建一个新的Java构建器(基于提供的构建器),而不检查发射器。

0 个答案:

没有答案