Awesome, thanks! Ya, I guess in that sense root-resource isn't brittle. I meant it more, brittle in the context of what other build tools were doing/assuming. Like when load-one converts a namespace into its corresponding root resource, its not smart. It's just a string replace. So if the namespace name differs from the filename, root-resource isn't actually able to find the resource for the corresponding namespace.
Anyways, thanks for the response! On Wednesday, 13 February 2019 19:33:19 UTC-8, Alex Miller wrote: > > > > On Wednesday, February 13, 2019 at 7:46:43 PM UTC-6, Didier wrote: >> >> Hey all, >> >> I've been working on internal build tools where I work, and when looking >> into how other build tools like lein do their aot :all compilation, it >> seems that they all rely on some brittle namespace finder library, which >> searches either the classpath, or a folder of files and tries to identity >> all the ns declarations. >> > > Or you use a hard-coded list (like the Clojure build itself). > > >> From that, they call compile in a loop for every namespace they found. >> But, compile just goes ahead and converts the namespace into a resource >> path in a very brittle way, just replaces dots for forward slashes, and >> dashes by underscores. >> > > This is exactly the algorithm used by the runtime to load every Clojure > namespace, so I don't think this particular part is brittle at all. > > >> That's because, `load-one` is actually used to compile, which internally >> relies on `load`. Load takes a resource path which needs to be found on the >> classpath, not a namespace. >> >> Now, there are some packages which have source files that have either a >> different ns name then their file name >> > > This is pretty rare as it's impossible for the runtime to load it in the > normal way when required (it must be explicitly loaded via one of the load > methods). > > >> , or they use in-ns and are actually evaluating into an existing >> namespace defined in another file. >> > > Slightly more common, but still comparatively rare to the very common case > of 1 ns per file. (clojure itself does this a number of times) > > >> Lein actually fails to compile these, because the namespace it finds are >> looked up as resources on the classpath by compile and it can't find the >> resource, because the resource path does not match the namespace. >> >> So, for my build tool aot :all compilation, I decided to instead use >> `load` with *compile-files* bound to true. And I just convert each source >> file in the source dir to a classpath resource path. >> >> From my perspective, this seems a better way to do it, that is more >> reliable, and frankly a lot simpler. But since no one >> > else did it this way, I'm curious if there is any known issue with this >> approach? >> > > Seems like a reasonable alternative to me. > > >> Regards! >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.