[CLJ-1161] sources jar has bad versions.properties resource Created: 11/Feb/13 Updated: 06/Oct/14
|Affects Version/s:||Release 1.4, Release 1.5|
|Fix Version/s:||Release 1.8|
|Reporter:||Steve Miner||Assignee:||Stuart Halloway|
The "sources" jar (at least since Clojure 1.4 and including 1.5 RC) has a bad version.properties file in it. The resource clojure/version.properties is literally:
The regular Clojure jar has the correct version string in that resource.
I came across a problem when I was experimenting with the sources jar (as used by IDEs). I naively added the sources jar to my classpath, and Clojure died on start up. The bad clojure/versions.properties file was found first, which led to a parse error as the clojure version was being set.
Solution: patch leaves version.properties file out of sources JAR, where it causes problems for tools.
|Comment by Steve Miner [ 11/Feb/13 10:04 AM ]|
Notes from the dev mailing list:
The "sources" JAR is generated by another Maven plugin, configured here:
The simplest solution might be to just exclude the file from the sources jar. It looks like maven-source-plugin has an excludes option which would do the trick:
|Comment by Jeff Valk [ 21/Apr/14 8:20 AM ]|
This issue is marked closed, but I'm still seeing it: the clojure-1.6.0-sources.jar, clojure-1.5.1-sources.jar, etc on Maven Central still contain the bad version.properties files. More specifically, it looks like the fix has been applied to builds in the SNAPSHOTS repository, but not to RELEASES.
|Comment by Alex Miller [ 24/Apr/14 4:15 PM ]|
Not sure what's needed here, but marking incomplete.
|Comment by Jeff Valk [ 25/Apr/14 11:13 AM ]|
Would a fix for this update existing sources jars (1.5.1, 1.6.0, etc) on Central? Or would any fix have to wait on the next Clojure release?
|Comment by Alex Miller [ 25/Apr/14 12:37 PM ]|
For all the same reasons that mutable state is undesirable, changing an existing release jar in the central Maven repository is also undesirable. While it's not technically impossible, we will not update existing releases and this will need to wait for the next. I've looked at this problem a little and I do not yet know enough to know how to fix it or why it even varies between snapshot and release. Help welcome!
In which tool do you see a resulting problem from this?
|Comment by Jeff Valk [ 25/Apr/14 11:56 PM ]|
Despite the way I phrased the question, I'd hoped that would be the answer. It's the right policy.
Unfortunately, this issue leaves the released sources jars essentially unusable from a tools standpoint. CIDER now has source code navigation from stacktraces – you can jump into both Clojure and Java function definitions from the error/trace. For the latter, the sources jar (for Clojure or any other Java library) needs to be on the classpath as a dev dependency. There's more host interop support in the works for CIDER too ("embrace the host platform"), but not being able to add a dependency on a stable Clojure sources jar presents a wrinkle.
Are the official Clojure releases built by Hudson? The Hudson build right before the 1.6.0 release (#532) and the one right after (#534) both show the exclusion fix, as does the git clojure-1.6.0 tag, which when I check out and build from source, is fine. The Hudson builds with release tags (e.g. 1.6 = #533, 1.6-RC1 = #512, etc), though, don't show any artifacts other than a pom.xml. This would seem to make it rather hard to audit builds...am I missing something?