[Scons-dev] File-based build tools will never handle Java
Chris BeHanna
chris at behanna.org
Thu Sep 6 14:26:33 EDT 2012
On Sep 6, 2012, at 13:21 , Greg Ward <greg at gerg.ca> wrote:
> On 06 September 2012, Chris BeHanna said:
>> On Sep 5, 2012, at 21:20 , Greg Ward <greg at gerg.ca> wrote:
>>
>>> OK, I finally sat down and did a little thought experiment, and have
>>> convinced myself that file-based buld tools will never handle Java.
>>> The reason? Dependency cycles.
>>
>> I wonder if it's even anything to worry about. Have a .jar as
>> output and a defined set of .java files as input, and in the middle,
>> it's sausage-making. Don't even worry about tracking (or caching)
>> .class files; just track the dependency of a .jar file to its .java
>> files. As long as all of the .class files (even those that end up
>> being generated anonymously) end up in a predetermined location over
>> which you run the jar command, you should be good to go.
>
> Yup, that's exactly what I ended up doing at my old job, where I
> cobbled together a moderately scary mixed C++/Java build system using
> SCons and a lot of hard work. It was harder than it should have been,
> mainly because I had to write a custom Node class to represent the set
> of input files. SCons is just too slow when you give it 15,000 input
> files, but it was tolerable when I shrank it down to ~75 sets of input
> files. Writing custom Node classes that do not subclass File is a
> PITA.
:nod:
That performance hit is why $EMPLOYER is abandoning SCons. :-(
> However, something valuable is lost when you simplify dependencies so
> dramatically. Specifically, I implemented incremental testing, which
> was a win, but not nearly as much of a win as it could have been. E.g.
> if you modify a source file in a low-level component that everything
> else depends on, then you end up recompiling the world (no big deal:
> javac is fast enough), and re-running all the tests (not nice: the
> whole test suite is 20-30 min).
Can the tests be broken down to a per-jar basis? If so, and if you can identify the jar or jars that changed, then you only run the tests for the jars that changed.
--
Chris BeHanna
chris at behanna.org
More information about the Scons-dev
mailing list