By having jar accepting an alternative main class, uberjar can call jar with an
additional parameter and uberjar's alternative main class won't be ignored. This
fixes#897. In addition, as jar is now responsible for adding main to :aot, the
main class will now actually be compiled. This fixes#899.
Enforces a nREPL dependency and a clojure-complete dependency for the :repl
profile. Previously, the first found :repl profile from
`project.clj`-`profiles.clj`-default was returned and merged into the real
profile. Now all :repl profiles that are found are merged into the active
profile.
The dependencies are tagged with the ^:displace tag, and as such will be
discarded if a collision occurs.
The changes made `repl-profile-in-project` fail as it did not contain
`leiningen.core.project/empty-dependencies`, which has a :reduce tag in its
metadata for handling dependency merging. The dependency merger expands the
version to its url, hence the change to a url map.
Also removed a TODO from the file, fixed by 27fe39d.
An object with the metadata flag `:displace` set signals that, if a merge
conflict appears, this object is to be discarded. Likewise, `^:replace` signals
that this object should be kept in a merge conflict.
However, previous functionality only tested if the right element had the
`:replace` flag, or if the left element had the `:displace` flag. This commit
resolves this by checking whether the left element has a `:replace` flag and the
right element has a `:displace` flag, and handles accordingly to the semantics
explained in the previous paragraph.
Whenever two elements where both has the `:displace` flag is merged, the
leftmost is picked, and their metadata is merged. Likewise for the `:replace`
flag. The elements will not lose their `:displace` and `:replace` flags, as they
have not really been preferred over another element.
The `nil?` tests have been placed at the top to reflect that nil is the lack of
a value, not a value itself. As such, elements will not be "preferred" or
"discarded" over nil/nothing.
Tests if the git ref path exists before slurping the SHA from it. If it does not
exist, return nil instead of throwing an error. Also remove empty references to
the SHA where they may occur.
For "important" events, aether gives us enough info to figure
out which repo it is happening from. Lets use it instead
of trying to match from project data.
Previously matching from the project data would be incorrect
and output failures or not output anything for transative repos.
Previously the output for downloading files would just say "failed to find".
Instead output the fact checksums were invalid, and from which repository.
If we're not making javac run in a subprocess, libraries the project
depends on which leiningen has another version of will clash. This is
because leiningen append its standalone to java's bootclasspath, which
makes the ToolProvider add these classpaths automatically into the java
compiler it returns. By starting a subprocess without leiningen added to
the bootclasspath, we avoid this library clashing.
UI changes as a result of this patch: Whenever javac fails, the task one
wanted to run will be responsible for aborting Leiningen, whereas javac
did this itself when it discovered that the compilation failed. As we're
running in a subprocess, an abort message such as
Uberjar aborting because jar/compilation failed: Subprocess failed
will appear, though this will only be appended to the javac error
message and the "Compilation of Java sources (lein javac) failed."
message.
This commit also adds the overhead of starting a subprocess when one
have to compile java sources, but it will not start one if no
.class-files are outdated/not existing.
Not tested on Windows.
Removes the task to be run residing within a project's metadata (inside
:without-profiles) in addition to the original map, in order to prevent
"with-profile" from reviving already used aliases.
This makes it so that a selector such as :only can prevent unnecessary loading
of namespaces that they aren't going to work on. It is a way for a selector
that knows which namespaces it will touch by the selector's arguments and the
namespace names themselves to not have to load all namespaces.
This commit also fixes a bug introduced by a recent pull request where
'namespaces' could not be resolved. Per discussion with technomancy, provided a
default test selector *always*.