The following is a list of guidelines for Java developers to help packaging and distributing Java software. This only addresses the Unix world, and more specifically Linux world, whereas Java is essantially cross-platform, which means these guidelines could be completly out of topic in other contexts. However, they are usually better applied upstream, and only represent slight additional work easily handled by standard Java build tools.
When building software from sources, binaries are only a waste of bandwidth and disk space. The same is true for Javadocs, generated docs, and so on. But nothing prevents for providing also a binary release.
Including external binaries is evil because:
But nothing prevents for providing also those binaries in a separate archive.
It is always a pain to not have a doclet sources, or an Ant build script, as it prevents to recreate original building process.
The zip format doesn't preserve Unix file permissions, and is inefficient. Gzipped, or even better, bzipped tarballs are more convenient. But nothing prevents for providing also zip format archives.
Class-Path references in MANIFESTs
The Class-Path system of MANIFESTs is evil
because:
Wrapper scripts are much versatile and universal. We provide a set of convenient shell helper functions for setting up such Unix scripts easily (see jpackage-utils in project CVS).