Coder Social home page Coder Social logo

alembic's Introduction

alembic

Repository · Issues · API docs · Annotated source · Release Notes

Alembic is a clojure library that allows you to distill jars onto your classpath in a running JVM instance. You can use it to add dependencies to a running REPL, either in an ad-hoc fashion, or by reloading your project.clj file.

You can also use it to reload your project.clj file and invoke leiningen tasks.

It uses leiningen and pomegranate to resolve the jars, classlojure to isolate leiningen and its dependencies, and dynapath to modify the classpath.

This means you can use lein and pomegranate without their dependencies interfering with your project classpath. The only dependencies added are classlojure and dynapath - both small libraries with no transitive dependencies.

Project Dependency

To use Alembic with nREPL or any other clojure REPL, you will need to add Alembic to you development dependencies. For a leiningen based project, you can do this by adding it to the :dependencies vector of the :dev profile in project.clj.

:profiles {:dev {:dependencies [[alembic "0.3.2"]]}}

You can enable Alembic on all you projects, by adding it to the :dependencies vector of the :user profile in ~/.lein/profiles.clj.

Usage

Reloading project.clj

If you modify the dependencies in your project.clj file, you can load the modified dependencies with load-project.

This will add all non-conflicting dependency changes. Only new dependencies are considered non-conflicting. New versions of existing dependencies are not loaded. Removed dependencies are not unloaded.

Adding Ad-Hoc Dependencies

To add a dependency to the classpath, use the distill function, passing a leiningen style dependency vector.

(alembic.still/distill '[org.clojure/tools.logging "0.3.2"])

You can pass a sequence of dependencies to add, or just a single dependency as in the example above.

distill prints the dependencies added to the classpath, and those not added due to conflicts.

The distill function returns with no side-effects, if the dependency's jars are already on the classpath.

By default, distill uses the repositories in the current lein project. You can override this by passing a map of lein style repository information to the :repositories option. The project-repositories function can be used to obtain the lein project repositories, should you want to adapt these to pass as an :repositories argument.

For programmatic use, distill* returns a sequence of maps, where each map represents a dependent jar. Those jars without a current version on the classpath will be added to the classpath. The jars with a version already on the classpath are not added to the classpath, and the currently loaded version is reported on the :current-version key.

You can query the dependencies that have been added with the dependencies-added function, which returns a sequence of leiningen style dependency vectors.

You can lookup the dependency jars for the distilled dependencies, using the dependency-jars function.

The conflicting-versions function returns a sequence of dependencies for a distilled dependency, where the dependency jar version doesn't match the version currently on the classpath.

Invoking Leiningen Tasks

The lein macro invokes leiningen. For example, to show your project's dependency tree, you could run:

(alembic.still/lein deps :tree)

The macro allows you to invoke tasks without passing string arguments. If you need to call lein functionally, use the lein* function instead.

Configuring User Profile with Injections

You can reduce the amount of typing you need to use alembic by using the lein-shorthand plugin and configuring your :user profile in ~/.lein/profiles.clj.

{:user
  {:dependencies [[alembic "0.3.2"]]
   :plugins [[com.palletops/lein-shorthand "0.4.0"]]
   :shorthand {. [alembic.still/distill alembic.still/lein]}}}

This will define the . namespace, so you can run (./lein deps :tree).

Support and Discussion

Discussion of alembic, either on the clojure-tools google group, or on #clojure or #pallet on freenode IRC.

License

Copyright © 2013 Hugo Duncan

Distributed under the Eclipse Public License.

alembic's People

Contributors

behrica avatar hugoduncan avatar laurentpetit avatar pbors avatar tbatchelli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alembic's Issues

creates a tmp file without ensuring the tmp directory exists

if you were to, in your project.clj set the java tmp directory to point to a directory that doesn't exist, alembic throws a filenotfound exception. because alembic is used deep in the depths of various bits of tooling figuring out this error can take some doing. it is very easy to end up in this situation, if say you have a large test suite that does a lot of temp file munging, and to facilitate easy clean up you set the tmp dir to something like /tmp/foo and your os helpfully deletes the contents of /tmp on reboot.

it is crazy to me that File doesn't ensure the tmp exists, but I have no idea how to go about getting that fixed.

Distill not working

I'm getting this error when I try to use alembic.still/distill to load a library from repl:

3. Unhandled java.lang.reflect.InvocationTargetException
   (No message)

NativeMethodAccessorImpl.java:   -2  sun.reflect.NativeMethodAccessorImpl/invoke0
NativeMethodAccessorImpl.java:   62  sun.reflect.NativeMethodAccessorImpl/invoke
DelegatingMethodAccessorImpl.java:   43  sun.reflect.DelegatingMethodAccessorImpl/invoke
               Method.java:  498  java.lang.reflect.Method/invoke
                  core.clj:   54  classlojure.core/invoke-in*
               RestFn.java:  494  clojure.lang.RestFn/invoke
                  core.clj:   72  classlojure.core/eval-in*/print-read-eval
                  core.clj:   74  classlojure.core/eval-in*
               RestFn.java:  425  clojure.lang.RestFn/invoke
                  AFn.java:  156  clojure.lang.AFn/applyToHelper
               RestFn.java:  132  clojure.lang.RestFn/applyTo
                  core.clj:  634  clojure.core/apply
                  core.clj:   93  classlojure.core/eval-in
               RestFn.java:  425  clojure.lang.RestFn/invoke
                 still.clj:   81  alembic.still/project-repositories
                 still.clj:   87  alembic.still/project-repositories
                 still.clj:  231  alembic.still/distill*
                 still.clj:  273  alembic.still/distill
               RestFn.java:  410  clojure.lang.RestFn/invoke
                      REPL:   45  user/eval16113
             Compiler.java: 6782  clojure.lang.Compiler/eval
             Compiler.java: 6745  clojure.lang.Compiler/eval
                  core.clj: 3081  clojure.core/eval
                  main.clj:  240  clojure.main/repl/read-eval-print/fn
                  main.clj:  240  clojure.main/repl/read-eval-print
                  main.clj:  258  clojure.main/repl/fn
                  main.clj:  258  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   87  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  630  clojure.core/apply
                  core.clj: 1868  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   85  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  222  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
    interruptible_eval.clj:  190  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                  AFn.java:   22  clojure.lang.AFn/run
   ThreadPoolExecutor.java: 1142  java.util.concurrent.ThreadPoolExecutor/runWorker
   ThreadPoolExecutor.java:  617  java.util.concurrent.ThreadPoolExecutor$Worker/run
               Thread.java:  745  java.lang.Thread/run

2. Caused by clojure.lang.Compiler$CompilerException
   Error compiling puget/printer.clj at (1:1)

             Compiler.java: 7142  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  457  clojure.lang.RestFn/invoke
                  repl.clj:    1  whidbey.repl/eval3297/loading--auto--
                  repl.clj:    1  whidbey.repl/eval3297
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  482  clojure.lang.RestFn/invoke
           colorscheme.clj:    1  ultra.colorscheme/eval2908/loading--auto--
           colorscheme.clj:    1  ultra.colorscheme/eval2908
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  436  clojure.lang.RestFn/invoke
              hardcore.clj:    1  ultra.hardcore/eval2077/loading--auto--
              hardcore.clj:    1  ultra.hardcore/eval2077
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  512  clojure.lang.RestFn/invoke
                plugin.clj:    1  ultra.plugin/eval1345/loading--auto--
                plugin.clj:    1  ultra.plugin/eval1345
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  408  clojure.lang.RestFn/invoke
                 utils.clj:   68  leiningen.core.utils/require-resolve
               project.clj:  741  leiningen.core.project/apply-middleware
             protocols.clj:  143  clojure.core.protocols/fn
             protocols.clj:   19  clojure.core.protocols/fn/G
             protocols.clj:   31  clojure.core.protocols/seq-reduce
             protocols.clj:   54  clojure.core.protocols/fn
             protocols.clj:   13  clojure.core.protocols/fn/G
                  core.clj: 6289  clojure.core/reduce
               project.clj:  738  leiningen.core.project/apply-middleware
               project.clj:  769  leiningen.core.project/activate-middleware
               project.clj:  876  leiningen.core.project/init-project
               project.clj:  942  leiningen.core.project/read
               project.clj:  943  leiningen.core.project/read
                      REPL:    0  clojure.core/eval1337
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6693  clojure.lang.Compiler/eval
             Compiler.java: 6666  clojure.lang.Compiler/eval
                  core.clj: 2927  clojure.core/eval
                      REPL:    0  clojure.core/eval256
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6666  clojure.lang.Compiler/eval
NativeMethodAccessorImpl.java:   -2  sun.reflect.NativeMethodAccessorImpl/invoke0
NativeMethodAccessorImpl.java:   62  sun.reflect.NativeMethodAccessorImpl/invoke
DelegatingMethodAccessorImpl.java:   43  sun.reflect.DelegatingMethodAccessorImpl/invoke
               Method.java:  498  java.lang.reflect.Method/invoke
                  core.clj:   54  classlojure.core/invoke-in*
               RestFn.java:  494  clojure.lang.RestFn/invoke
                  core.clj:   72  classlojure.core/eval-in*/print-read-eval
                  core.clj:   74  classlojure.core/eval-in*
               RestFn.java:  425  clojure.lang.RestFn/invoke
                  AFn.java:  156  clojure.lang.AFn/applyToHelper
               RestFn.java:  132  clojure.lang.RestFn/applyTo
                  core.clj:  634  clojure.core/apply
                  core.clj:   93  classlojure.core/eval-in
               RestFn.java:  425  clojure.lang.RestFn/invoke
                 still.clj:   81  alembic.still/project-repositories
                 still.clj:   87  alembic.still/project-repositories
                 still.clj:  231  alembic.still/distill*
                 still.clj:  273  alembic.still/distill
               RestFn.java:  410  clojure.lang.RestFn/invoke
                      REPL:   45  user/eval16113
             Compiler.java: 6782  clojure.lang.Compiler/eval
             Compiler.java: 6745  clojure.lang.Compiler/eval
                  core.clj: 3081  clojure.core/eval
                  main.clj:  240  clojure.main/repl/read-eval-print/fn
                  main.clj:  240  clojure.main/repl/read-eval-print
                  main.clj:  258  clojure.main/repl/fn
                  main.clj:  258  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   87  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  630  clojure.core/apply
                  core.clj: 1868  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   85  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  222  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
    interruptible_eval.clj:  190  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                  AFn.java:   22  clojure.lang.AFn/run
   ThreadPoolExecutor.java: 1142  java.util.concurrent.ThreadPoolExecutor/runWorker
   ThreadPoolExecutor.java:  617  java.util.concurrent.ThreadPoolExecutor$Worker/run
               Thread.java:  745  java.lang.Thread/run

1. Caused by java.io.FileNotFoundException
   Could not locate fipp/engine__init.class or fipp/engine.clj on classpath:

                   RT.java:  443  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  551  clojure.lang.RestFn/invoke
               printer.clj:    1  puget.printer/eval3342/loading--auto--
               printer.clj:    1  puget.printer/eval3342
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  457  clojure.lang.RestFn/invoke
                  repl.clj:    1  whidbey.repl/eval3297/loading--auto--
                  repl.clj:    1  whidbey.repl/eval3297
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  482  clojure.lang.RestFn/invoke
           colorscheme.clj:    1  ultra.colorscheme/eval2908/loading--auto--
           colorscheme.clj:    1  ultra.colorscheme/eval2908
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  436  clojure.lang.RestFn/invoke
              hardcore.clj:    1  ultra.hardcore/eval2077/loading--auto--
              hardcore.clj:    1  ultra.hardcore/eval2077
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  512  clojure.lang.RestFn/invoke
                plugin.clj:    1  ultra.plugin/eval1345/loading--auto--
                plugin.clj:    1  ultra.plugin/eval1345
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6692  clojure.lang.Compiler/eval
             Compiler.java: 7130  clojure.lang.Compiler/load
                   RT.java:  370  clojure.lang.RT/loadResourceScript
                   RT.java:  361  clojure.lang.RT/loadResourceScript
                   RT.java:  440  clojure.lang.RT/load
                   RT.java:  411  clojure.lang.RT/load
                  core.clj: 5641  clojure.core/load/fn
                  core.clj: 5640  clojure.core/load
               RestFn.java:  408  clojure.lang.RestFn/invoke
                  core.clj: 5446  clojure.core/load-one
                  core.clj: 5486  clojure.core/load-lib/fn
                  core.clj: 5485  clojure.core/load-lib
               RestFn.java:  142  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5524  clojure.core/load-libs
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  626  clojure.core/apply
                  core.clj: 5607  clojure.core/require
               RestFn.java:  408  clojure.lang.RestFn/invoke
                 utils.clj:   68  leiningen.core.utils/require-resolve
               project.clj:  741  leiningen.core.project/apply-middleware
             protocols.clj:  143  clojure.core.protocols/fn
             protocols.clj:   19  clojure.core.protocols/fn/G
             protocols.clj:   31  clojure.core.protocols/seq-reduce
             protocols.clj:   54  clojure.core.protocols/fn
             protocols.clj:   13  clojure.core.protocols/fn/G
                  core.clj: 6289  clojure.core/reduce
               project.clj:  738  leiningen.core.project/apply-middleware
               project.clj:  769  leiningen.core.project/activate-middleware
               project.clj:  876  leiningen.core.project/init-project
               project.clj:  942  leiningen.core.project/read
               project.clj:  943  leiningen.core.project/read
                      REPL:    0  clojure.core/eval1337
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6693  clojure.lang.Compiler/eval
             Compiler.java: 6666  clojure.lang.Compiler/eval
                  core.clj: 2927  clojure.core/eval
                      REPL:    0  clojure.core/eval256
             Compiler.java: 6703  clojure.lang.Compiler/eval
             Compiler.java: 6666  clojure.lang.Compiler/eval
NativeMethodAccessorImpl.java:   -2  sun.reflect.NativeMethodAccessorImpl/invoke0
NativeMethodAccessorImpl.java:   62  sun.reflect.NativeMethodAccessorImpl/invoke
DelegatingMethodAccessorImpl.java:   43  sun.reflect.DelegatingMethodAccessorImpl/invoke
               Method.java:  498  java.lang.reflect.Method/invoke
                  core.clj:   54  classlojure.core/invoke-in*
               RestFn.java:  494  clojure.lang.RestFn/invoke
                  core.clj:   72  classlojure.core/eval-in*/print-read-eval
                  core.clj:   74  classlojure.core/eval-in*
               RestFn.java:  425  clojure.lang.RestFn/invoke
                  AFn.java:  156  clojure.lang.AFn/applyToHelper
               RestFn.java:  132  clojure.lang.RestFn/applyTo
                  core.clj:  634  clojure.core/apply
                  core.clj:   93  classlojure.core/eval-in
               RestFn.java:  425  clojure.lang.RestFn/invoke
                 still.clj:   81  alembic.still/project-repositories
                 still.clj:   87  alembic.still/project-repositories
                 still.clj:  231  alembic.still/distill*
                 still.clj:  273  alembic.still/distill
               RestFn.java:  410  clojure.lang.RestFn/invoke
                      REPL:   45  user/eval16113
             Compiler.java: 6782  clojure.lang.Compiler/eval
             Compiler.java: 6745  clojure.lang.Compiler/eval
                  core.clj: 3081  clojure.core/eval
                  main.clj:  240  clojure.main/repl/read-eval-print/fn
                  main.clj:  240  clojure.main/repl/read-eval-print
                  main.clj:  258  clojure.main/repl/fn
                  main.clj:  258  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   87  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  630  clojure.core/apply
                  core.clj: 1868  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   85  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  222  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
    interruptible_eval.clj:  190  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                  AFn.java:   22  clojure.lang.AFn/run
   ThreadPoolExecutor.java: 1142  java.util.concurrent.ThreadPoolExecutor/runWorker
   ThreadPoolExecutor.java:  617  java.util.concurrent.ThreadPoolExecutor$Worker/run
               Thread.java:  745  java.lang.Thread/run

use leiningen.core.project/default-repositories if no project.clj is present

using alembic in just a lein repl without a project.clj is a little bit cumbersome, as i have to add repositories or alembic fails due to not finding project.clj

(alembic.still/distill 
  '[awesome-lib "9000"] 
  :repositories [
    ["central" {:url "https://repo1.maven.org/maven2/" :snapshots false}]
    ["clojars" {:url "https://clojars.org/repo/"]])

could alembic not fall back to use leiningen.core.project/default-repositories

or is it possible to define some defaults in a user profile?

Don't you need to quote the symbol?

Shouldn't you quote the symbol? Like this :-

(alembic.still/distill ['org.clojure/tools.logging "0.2.0"])

otherwise :-

CompilerException java.lang.RuntimeException: Unable to resolve symbol: org.clojure/tools.logging in this context, compiling:(NO_SOURCE_PATH:1:1) 

load-project fails when using :env in the authentication credentials for a repository

Invoking load-project fails for me with this exception:

java.lang.IllegalArgumentException: No matching ctor found for class org.sonatype.aether.repository.Authentication
               Reflector.java:183 clojure.lang.Reflector.invokeConstructor
                   aether.clj:165 cemerick.pomegranate.aether/set-authentication
                   aether.clj:185 cemerick.pomegranate.aether/make-repository
                   aether.clj:712 cemerick.pomegranate.aether/resolve-dependencies*[fn]
                    core.clj:2559 clojure.core/map[fn]
                  LazySeq.java:40 clojure.lang.LazySeq.sval
                  LazySeq.java:49 clojure.lang.LazySeq.seq
                     Cons.java:39 clojure.lang.Cons.next
         PersistentVector.java:51 clojure.lang.PersistentVector.create
   LazilyPersistentVector.java:31 clojure.lang.LazilyPersistentVector.create
                     core.clj:354 clojure.core/vec
                   aether.clj:712 cemerick.pomegranate.aether/resolve-dependencies*
                  RestFn.java:137 clojure.lang.RestFn.applyTo
                     core.clj:624 clojure.core/apply
                   aether.clj:729 cemerick.pomegranate.aether/resolve-dependencies
                  RestFn.java:512 clojure.lang.RestFn.invoke
                 (Unknown Source) clojure.core/eval1726
               Compiler.java:6703 clojure.lang.Compiler.eval
               Compiler.java:6693 clojure.lang.Compiler.eval
               Compiler.java:6666 clojure.lang.Compiler.eval
                    core.clj:2927 clojure.core/eval
                 (Unknown Source) clojure.core/eval1722
               Compiler.java:6703 clojure.lang.Compiler.eval
               Compiler.java:6666 clojure.lang.Compiler.eval
                 (Unknown Source) sun.reflect.NativeMethodAccessorImpl.invoke0
 NativeMethodAccessorImpl.java:62 sun.reflect.NativeMethodAccessorImpl.invoke
DelegatingMethodAccessorImpl.java:43 sun.reflect.DelegatingMethodAccessorImpl.invoke
                  Method.java:497 java.lang.reflect.Method.invoke
                      core.clj:54 classlojure.core/invoke-in*
                  RestFn.java:494 clojure.lang.RestFn.invoke
                      core.clj:72 classlojure.core/eval-in*[fn]
                      core.clj:74 classlojure.core/eval-in*
                  RestFn.java:425 clojure.lang.RestFn.invoke
                     AFn.java:156 clojure.lang.AFn.applyToHelper
                  RestFn.java:132 clojure.lang.RestFn.applyTo
                     core.clj:634 clojure.core/apply
                      core.clj:93 classlojure.core/eval-in
                  RestFn.java:425 clojure.lang.RestFn.invoke
                     still.clj:93 alembic.still/resolve-dependencies
                    still.clj:178 alembic.still/add-dependencies
                    still.clj:297 alembic.still/load-project*
                    still.clj:319 alembic.still/load-project
                  RestFn.java:439 clojure.lang.RestFn.invoke
                    still.clj:330 alembic.still/load-project
                    still.clj:332 alembic.still/load-project

Inside my project.clj I have this:

:repositories {"my.datomic.com" {:url "https://my.datomic.com/repo"
                                   :username [:env/datomic_user]
                                   :password [:env/datomic_password]}}

From my quick debug session it seems that the culprit is alembic.still/load-project*

the username and password is correctly substituted inside the classlojure invocation:

(classlojure/eval-in
         (:alembic-classloader @still)
         `(do
            (require '[leiningen.core.project :as ~'project])
            (let [project# (leiningen.core.project/read ~project-file)]
              [(:dependencies project#)
               (:repositories project#)])))

But in the subsequent call to (add-dependencies still dependencies (into {} repositories) options) the username and password are still the vector containing the keyword.

Cheers,
Gerrit

add proxy support

I am behind a corporate proxy, so the "distill" method does not manage to download dependencies.

I looked at the code, the aether/resolve-dependencies you use allows to specify a proxy.
So it just need to be passds through.

If I find some time I will fix it and send you a pull request

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.