Re: lein jar, uberjar don't allow hyphens in paths?
On Saturday, March 4, 2017 at 8:19:44 PM UTC-6, Sean Corfield wrote: > > Java doesn’t allow – in names. That’s why Clojure and Clojure tooling maps > – in names to _ in files (and classes). > Right, and this normally causes no problems (with a little bit of care). I experience no problems with the hyphen/underscroe mapping using 'lein run' or running from the repl. It's only 'lein jar' or 'lein uberjar' that seems unable to manage the mapping properly when there's an underscore in a directory name, i.e. a hyphen in a non-terminal namespace path element. -- 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.
RE: lein jar, uberjar don't allow hyphens in paths?
Java doesn’t allow – in names. That’s why Clojure and Clojure tooling maps – in names to _ in files (and classes). Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN An Architect's View -- http://corfield.org/ "If you're not annoying somebody, you're not really alive." -- Margaret Atwood From: Mars0i Sent: Friday, March 3, 2017 9:17 PM To: Clojure Subject: lein jar, uberjar don't allow hyphens in paths? It looks like 'lein uberjar' and 'lein jar' don't like namespace path elements that contain hyphens. Example: lein new app foo-bar cd foo-bar Now edit src/foo_bar/core.clj, changing (ns foo-bar.core (:gen-class)) to (ns foo-bar.core (:gen-class :name foo-bar.core)) Then 'lein uberjar' reports: Compiling foo-bar.core Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method. Also, 'java -jar target/uberjar/foo-bar-0.1.0-SNAPSHOT-standalone.jar' prints: Error: Could not find or load main class foo_bar.core A similar problem seems to occur with 'lein jar'. However, no problem occurs with 'lein run', or with 'lein uberjar' if :name is left out of the ns form, or if :name is used but the project namespace qualifier does not contain a hyphen. I think this has to do with the fact that when I use :name with foo-bar, core.class ends up in target/uberjar/classes/foo-bar, while its related inner class files end up in target/uberjar/classes/foo_bar. If I don't use :name or if the path doesn't contain a dash, all of the classes end up in the same directory, e.g. foo_bar. (I don't know much about jar files or subtleties of how the jvm interprets them.) I have a standalone project that runs fine with 'lein run' but I'm unable to make an uberjar because of this problem. (I apparently to need the :name element in order to create an instance of the same class in my -main function.) The project is small enough that it won't be much trouble to rename filenames and namespace paths in order to get rid of dashes, but I'm wondering if there's a different solution. I'm also wondering whether this is a bug/flaw in Leiningen. I can submit an issue if so. -- 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. -- 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.
lein jar, uberjar don't allow hyphens in paths?
It looks like 'lein uberjar' and 'lein jar' don't like namespace path elements that contain hyphens. Example: lein new app foo-bar cd foo-bar Now edit src/foo_bar/core.clj, changing (ns foo-bar.core (:gen-class)) to (ns foo-bar.core (:gen-class :name foo-bar.core)) Then 'lein uberjar' reports: Compiling foo-bar.core Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method. Also, 'java -jar target/uberjar/foo-bar-0.1.0-SNAPSHOT-standalone.jar' prints: Error: Could not find or load main class foo_bar.core A similar problem seems to occur with 'lein jar'. However, no problem occurs with 'lein run', or with 'lein uberjar' if :name is left out of the ns form, or if :name is used but the project namespace qualifier does not contain a hyphen. I think this has to do with the fact that when I use :name with foo-bar, core.class ends up in target/uberjar/classes/foo-bar, while its related inner class files end up in target/uberjar/classes/foo_bar. If I don't use :name or if the path doesn't contain a dash, all of the classes end up in the same directory, e.g. foo_bar. (I don't know much about jar files or subtleties of how the jvm interprets them.) I have a standalone project that runs fine with 'lein run' but I'm unable to make an uberjar because of this problem. (I apparently to need the :name element in order to create an instance of the same class in my -main function.) The project is small enough that it won't be much trouble to rename filenames and namespace paths in order to get rid of dashes, but I'm wondering if there's a different solution. I'm also wondering whether this is a bug/flaw in Leiningen. I can submit an issue if so. -- 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.