Re: How to set up a fast correct java build?
On 08-01-2010 06:08, Joshua Maurice wrote:
I'm sorry if this is answered in a FAQ somewhere, but the first
comp.lang.java.programmer FAQ I found referenced Java version 1.1, so
I stopped reading there.
I'm working on a project now with over 20,000 java source files, in
addition to more than 4,000 C++ source files, some forms of custom
code generation, an eclipse build, and probably other things I don't
know offhand.
Due to various requirements, we cannot put all of the source files
into a single jar. Many jars are requirements. (Different jars for
plugins, for client API, server impl. Then multiply by several
different products, and we arrive at over required 200 jars.)
How do you build your java code?
I'm looking for a fast, correct build. Let me be very specific with
the term "correct". A build is correct iff a build is equivalent to if
you completely cleaned the source file system beforehand of previously
build files.
To be fast with such a large number of files, you basically need to
have an incremental parallel build, possibly distributed (though this
is harder with Java than say C++, for example).
How do you compile your Java? 20,000 source files is not something to
laugh at and just "clean each time" nor "cross your fingers and hope
that Ant depends or javamake catches all of the dependencies" as each
missed dependency could result in lost developer man weeks. Moreover,
the problem is exacerbated with the other non-Java components of our
build. For example, some java source is generated by in-house custom
tools (in order to get serialization between C++ and Java), and
incremental becomes even more important as it's not just 20,000 java
source files anymore. It's even more taking even more time, greatly
increasing the need for a correct fast (and thus incremental and
parallel) build.
Use ant, let it clean everything and build for scratch. And buy
a box that can do the job.
Frankly, the current state of affairs in the Java community is not
acceptable, and even laughable, given that solutions to these problems
(fast build, correct build) are known and have been known for many,
many years in the context of C and C++. (That javac cannot or will not
output dependency information ala gcc -M is amazing.)
Java usually compiles so much faster than C/C++ that it is not a
problem that need to be handled.
Arne