Thank you all so much for the great insights & references! Thanks to Chas' sample project I got it all working now, so expect a few new lib releases soon! Cheers, K.
On 14 February 2014 11:00, Chas Emerick <c...@cemerick.com> wrote: > I've added a sample.project.clj file to the cljx repo and pointed to it from > the README. I can see how the confusion may have gotten started due to a > particular detail in the example configuration snippet that was in the > README, which is also fixed. > > If someone wants to submit a patch so that `lein cljx sample` dumps that to > stdout (similar to `lein cljsbuild sample`), I'd be interested in that. > > Thanks, > > - Chas > > > On 02/14/2014 05:26 AM, Dave Della Costa wrote: >> >> Hi Chas, thanks for the clarification--it was definitely not clear to me >> how this worked so I appreciate the explanation. >> >> Regarding the PR, I suppose the same points you brought up here are >> relevant there, since I proposed including my (mistaken) notion of how >> source-paths work for cljx-based libs in the documentation there. >> >> So really the problem is a lack of knowledge about how leiningen works >> when packaging up a jar. However, despite the fact that this >> information is not cljx-specific, it may be useful simply to re-state >> what you've described in this email somewhere in the cljx docs for >> clueless folks like myself, since obvious it's not clear what is >> necessary configuration and what isn't...or else just provide a pointer >> to the relevant leiningen docs (if they exist). >> >> In any case, thanks! >> >> DD >> >> (2014/02/14 19:14), Chas Emerick wrote: >>> >>> This isn't really right. :source-paths are for your _sources_, not a >>> place to drop in whatever paths you want either on the classpath or >>> included in jar files, etc. Also, all generated content should go into >>> `target/*`, so that `lein clean` will have its intended effect >>> (eliminating all artifacts of previous build / project mgmt activities). >>> >>> (Some tools [definitely Counterclockwise, perhaps other IDE plugins as >>> well?] also use the value of :source-paths to configure go-to-definition >>> operations and such, so including non-source directories in >>> :source-paths will generally yield undesirable effects there.) >>> >>> When it builds jars, Leiningen includes resources from :source-paths, >>> :resource-paths, and :compile-path; the latter is almost never >>> customized, and defaults to "target/classes". >>> >>> So, you should put your cljx sources in :source-paths. You should have >>> cljx generate transformation results into some directory under >>> `target/`. If you want to redistribute the results, you should either >>> generate cljx results into `target/classes`, or investigate Leiningen's >>> (plethora of) options for customizing jar contents; see e.g. >>> >>> https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L331 >>> >>> >>> FWIW, that isn't cljx-specific at all; the same applies to Clojure >>> sources that are being AOT-compiled, and with a tweak, to Java sources >>> to be javac-compiled. >>> >>> cljsbuild produces *JavaScript* output, so its configuration is never >>> going to be relevant to whether or not ClojureScript resources produced >>> by cljx can be consumed by downstream projects. >>> >>> Dave, thanks for the PR; I'll reply separately to that on github. >>> >>> - Chas >>> >>> On 02/13/2014 10:06 PM, Dave Della Costa wrote: >>>> >>>> Hi Karsten, >>>> >>>> Strangely, I was doing the exact same thing as you yesterday and >>>> struggled for a bit until I found settings that work. >>>> >>>> I achieved success when I used the configuration from Cornice as a >>>> template: >>>> >>>> https://github.com/rkneufeld/cornice/blob/master/project.clj >>>> >>>> ...with one exception, my cljsbuild config contained only >>>> >>>> :cljsbuild {:builds [{:source-paths ["target/generated/cljs"]}]} >>>> >>>> vs. all the extra jar config and one not. If I recall correctly, I was >>>> getting the "java.util.zip.ZipException: duplicate entry" you mention >>>> until I removed the extra settings in cljsbuild. >>>> >>>> Looking at your config I also suspect you want >>>> >>>>> :source-paths ["src-cljs"] >>>> >>>> instead of >>>> >>>>> :source-paths ["src-clj" "src-cljs"] >>>> >>>> in your cljsbuild config. >>>> >>>> However, when I leave the cljsbuild configuration out completely, it >>>> seems to have no bearing on whether or not I can use the generated cljs >>>> files when including the library in another project. I suspect the >>>> ":jar true" setting is only relevant if you have strictly cljs files >>>> that need to be included--it seems like cljx has its own orthogonal >>>> build process which automatically includes cljs files in the jar file >>>> but I haven't dug into the code yet to confirm. This is just based on >>>> testing what happens when I tweak config settings (Kevin or Chas please >>>> let me know if I'm off-base here). >>>> >>>> What does seem to make all the difference is the sourcepaths settings, >>>> which it doesn't seem you have: >>>> >>>> :source-paths ["src" "target/generated-src/clj" >>>> "target/generated-src/cljs"] >>>> >>>> I needed this before I could see the clj/cljs files getting included in >>>> my library jar. >>>> >>>> Obviously, adjust all paths to fit your specific configuration. >>>> >>>> I've made a pull request to add a bit of further explanation on using >>>> cljx in libraries, as it would be helpful if this didn't require looking >>>> up how others had done it to figure it out! >>>> >>>> https://github.com/lynaghk/cljx/pull/30 >>>> >>>> Hope this helps-- >>>> >>>> Best, >>>> Dave >>>> >>>> (2014/02/13 20:22), Karsten Schmidt wrote: >>>>> >>>>> I've been busy working on a few libraries targetting both Clojure & >>>>> ClojureScript, however so far have only tested the CLJ side and now >>>>> that >>>>> it comes to addressing CLJS am running in circles (and on fumes) >>>>> unsuccessfully trying to tweak my project settings to make things work. >>>>> >>>>> All my source is using CLJX stored in the the "src-cljx" folder. My >>>>> rules then trigger generated sources into "src-clj" (for all Clojure >>>>> and >>>>> shared macros) and "src-cljs" for CLJS parts only. >>>>> >>>>> My project.clj is as follows: >>>>> >>>>> (defproject foo "0.1.0-SNAPSHOT" >>>>> :dependencies [[org.clojure/clojure "1.5.1"] >>>>> [org.clojure/clojurescript "0.0-2156"]] >>>>> :jar-exclusions [#"\.cljx|\.DS_Store|\.js|\.html"] >>>>> >>>>> :cljx {:builds [{:source-paths ["src-cljx"] >>>>> :output-path "src-clj" >>>>> :rules :clj} >>>>> {:source-paths ["src-cljx"] >>>>> :output-path "src-cljs" >>>>> :rules :cljs}]} >>>>> >>>>> :cljsbuild {:builds >>>>> [{:id "dev" >>>>> :source-paths ["src-clj" "src-cljs"] >>>>> :compiler >>>>> {:pretty-print true >>>>> :output-to "foo-0.1.0-SNAPSHOT.js" >>>>> :optimizations :simple} >>>>> :jar true}]} >>>>> >>>>> :plugins [[com.keminglabs/cljx "0.3.2"] >>>>> [lein-cljsbuild "1.0.2"]] >>>>> :hooks [cljx.hooks leiningen.cljsbuild]) >>>>> >>>>> I can successfully create a JAR from this with `lein install`, however >>>>> if I try to use this library as dependency in another CLJS project, >>>>> none >>>>> of the namespaces of this dependency seem to be found, even though I >>>>> verified that they're present in the JAR (contains both .clj & .cljs >>>>> versions). >>>>> >>>>> So I then assumed the reasons for this are the non-standard names for >>>>> the source folders. But adding this line at the root level of >>>>> project.clj will not work either and makes `lein install` fail with a >>>>> "java.util.zip.ZipException: duplicate entry": >>>>> >>>>> :source-paths ["src-clj" "src-cljs"] >>>>> >>>>> Therefore can someone please explain or point me to a correct project >>>>> setup to make this work? I've been trying to find answers on SO & >>>>> Google, but it seems this (strangely?) isn't a popular use case and I >>>>> couldn't find any helpful answers. >>>>> >>>>> Once this is solved am happy to write up a short tutorial or create a >>>>> lein template for future reference. >>>>> >>>>> Thank you! >>>>> K. >>>>> >>>>> -- >>>>> 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/groups/opt_out. > > > -- > 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/groups/opt_out. -- Karsten Schmidt http://postspectacular.com | http://toxiclibs.org | http://toxi.co.uk -- 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/groups/opt_out.