We want missing namespaces in :aot to not be silently ignored.
Implemented by removing the file-existence check from the function
that determines which namespaces need to be compiled.
This means we won't get the error if you compile an existing namespace
and subsequently delete the *.clj file. Oh well.
Despite the documentation on java.util.jar.Manifest [1], the Manifest class
seems to require an endline in its input. If not, it drops the last line (on my
system, version [2], anyway).
[1] http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html
[2] $ java -version
java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-0ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
The bug is from a commit from Feb 6 which changes how the classpath is passed javac to use @argfiles parameter.
SHA-1: 3867d4d17c
According to the javac specification (http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html) :
"An argument file can include javac options and source filenames in any combination. The arguments within a file can be space-separated or newline-separated. If a filename contains embedded spaces, put the whole filename in double quotes, and double each backslash ("My Files\\\\Stuff.java")."
This commit bends over backwards to add back support for java
classes in :main that was removed in 71e609c8a1. The crux of
the complexity was that when we try to require the namespace
relevant to the argument to `lein run`, we could get a
FileNotFoundException for two distinct reasons -- either the
namespace we were trying to run doesn't exist, in which case
we want to check if it was actually a class name; or the
namespace exists but it or some other dependency is trying
to require a namespace that doesn't exist. In the latter case
we definitely want the FileNotFoundException to propagate up
to the top. But distinguishing these two cases by examining
the exception is hacky at best, so the alternative adopted
here is to hold on to the exception, check if a class exists,
and if not, re-throw the exception.
This should handle the majority of use cases correctly. The
test added in 71e609c8a1 is still relevant and still passes.
lein run tries to support invoking static methods on classes by
swallowing FileNotFoundExceptions when requiring the namespace to run,
which can obscure the real error when there's a real issue loading a
namespace.
Phil said he wasn't interested in keeping the (undocumented) feature
around, so the easiest fix to the error message problem was to remove
that feature.
Added a test as well.