Hi Paolo, Thank for the reply, this is very helpful!
Unfortunately it seems like there may not be a sane way to do this currently with Leiningen: https://github.com/technomancy/leiningen/issues/973 But it does seem like this is the problem so for the time being I may have to give up trying to build with Leiningen. Max On Sep 8, 2013, at 5:43 AM, Paolo Viotti <[email protected]> wrote: > Hello, > > recently I had the same problem with Java and Maven. > The root cause was that in the created uber-jar the files > "org.jclouds.apis.ApiMetadata" "org.jclouds.providers.ProviderMetadata" > located in /META-INF/services didn't contain all the API/Provider ids. > So I had to tell Maven to merge those metadata files present in each of the > providers' jar into one single file in the uber-jar, instead of just > overwriting them. > > This, with Maven, can be accomplished in two ways: > using the maven assembly plugin: with a configuration file in which you > specify the metaInf-services handler (e.g. like this) > using the maven shade plugin: with a "ServicesResourceTransformer" > > Hope this helps, > Paolo > > > > On 08/09/2013 06:46, Max Countryman wrote: >> Hi Everett, >> >> Thanks for the quick response. I've tried updating to 1.6.2-incubating but >> still seem to receive the same error. >> >> From inside the compiled jar I tried calling: >> >> (clojure.pprint/pprint (.getURLs >> (java.lang.ClassLoader/getSystemClassLoader))). >> >> This was the result: >> >> [#<URL >> file:/Users/max/Documents/projects/my-app/target/my-app-0.1.0-SNAPSHOT-standalone.jar>] >> >> I'm wondering if this could have something to do with AOT complication given >> that it works fine from the repl? >> >> Thanks, >> >> >> Max >> >> On Sep 7, 2013, at 7:28 PM, Everett Toews <[email protected]> >> wrote: >> >>> It means that the cloudfiles-us JAR isn't contained on your classpath. >>> Although [org.jclouds/jclouds-allblobstore "1.6.0"] should contain it. Can >>> you list your classpath from within your app or see what leiningen is using >>> for the classpath? >>> >>> You might also want to try [org.apache.jclouds/jclouds-allblobstore >>> "1.6.2-incubating"] as that's our most recent release. >>> >>> HTH, >>> Everett >>> >>> >>> On Sep 7, 2013, at 9:12 PM, Max Countryman wrote: >>> >>>> Hi all, >>>> >>>> I am attempting to compile a jar via leiningen's uberjar command that uses >>>> JCloud's org.jclouds.blobstore2. >>>> >>>> The trouble I'm running into is that it seems the providers list isn't >>>> populated. Interestingly this works fine from the repl, but the compiled >>>> jar throws this error: >>>> >>>> Exception in thread "main" java.util.NoSuchElementException: key >>>> [cloudfiles-us] not in the list of providers or apis: >>>> {providers=[hpcloud-objectstorage], apis=[atmos]} >>>> at org.jclouds.ContextBuilder.newBuilder(ContextBuilder.java:178) >>>> at org.jclouds.blobstore2$blobstore.doInvoke(blobstore2.clj:103) >>>> at clojure.lang.RestFn.invoke(RestFn.java:445) >>>> at stint_uploader.core$_main.invoke(core.clj:40) >>>> at clojure.lang.AFn.applyToHelper(AFn.java:159) >>>> at clojure.lang.AFn.applyTo(AFn.java:151) >>>> at stint_uploader.core.main(Unknown Source) >>>> >>>> Here's a simple example: >>>> >>>> (ns my-app.core >>>> (:require [org.jclouds.blobstore2 :refer :all]) >>>> (:gen-class)) >>>> >>>> (defn -main [] >>>> (blobstore "cloudfiles-us" "foo" "bar")) >>>> >>>> And the project.clj would look something like: >>>> >>>> (defproject my-app "0.1.0-SNAPSHOT" >>>> :description "FIXME: write description" >>>> :url "http://example.com/FIXME" >>>> :license {:name "Eclipse Public License" >>>> :url "http://www.eclipse.org/legal/epl-v10.html"} >>>> :dependencies [[org.clojure/clojure "1.4.0"] >>>> [org.clojure/tools.logging "0.2.3"] >>>> [org.clojure/core.incubator "0.1.0"] >>>> [org.jclouds/jclouds-allblobstore "1.6.0"]] >>>> :main my-app.core) >>>> >>>> Any advice is greatly appreciated, >>>> >>>> Thanks, >>>> >>>> >>>> Max >
