Capsule – Package and Deploy JVM Applications
capsule.io
capsule.io
1. https://docs.oracle.com/javase/8/docs/technotes/guides/deplo... 2. https://github.com/sbt/sbt-assembly 3. https://github.com/sbt/sbt-native-packager
How would that be useful?
As for the project, I'm trying to understand what it provides over "lein uberjar" that I'm already using (and happy with it)?
2. Even with an uberjar you need a platform specific startup script (to pick a JVM version, set JVM flags, set up a boot classpath if you need it or agents if you need them). With Capsule, all of that is stored as metadata in the manifest, and the capsule sets up everything on its own.
3. Capsule provides other features, such as launching itself inside a container (and it's better than Docker because the container is unprivileged, and doesn't require an image), packaging as a native application (with icons etc.), launching itself as a daemon/service and more.
With Future I've meant would it be easy to put a Future based API which I like b/c of composiblity on top of Quasar, e.g. on top of fibers.
(Futures are just an API to concurrency not concurrency itself that can sit on actors, forkjoin, ...)
My personal feeling is that the local install approach of gem/npm has won over the pull dependency approach of Maven/Ant - at least for development, but I think also with Docker approaches.
Java will address this with Jigsaw in Java 9 at last.
http://openjdk.java.net/projects/jigsaw/doc/quickstart.html
Capsule seems to be pulling dependencies if not packaged.
But we switched to JAR/Docker deployments for Scala some time ago with Jetty instead of WARs and so Capsule is welcome and we'll definetly try it. Hope it will switch to supporting Jigsaw with Java 9.
What distinction are you drawing here, with local install vs pull dependency?
Whenever I've run maven it's created a local repository and saved all the dependencies in that, but perhaps I'm misunderstanding the distinction you are drawing?
1. Push deps to an app means: npm install X
This makes it easier to promote libraries as it's easier to try them out. Just write npm install X and you're done.
2. Pull deps means: declare dependencies in your app and a package manager will download them.
This makes it harder to try libs you find on Github for my taste. It also ties dep management to packaging, where e.g. with Docker I prefer to manage dependency in the Docker file instead.
(npm can do pull too)
Where I do agree is that the maven UX is nowhere near as easy to use, but lately I have been using it over the Clojure facade and its been quite nice.
if I could vote in either direction I think maven/sbt is actually easier because you don't need to deal with "global" install. very dumb feature to share packages across projects, much simpler to think about deps as always project specific. but then again no one forces you to use global install... so it's the same. it only gets bad once you need some hacky junk like rvm or virtualenv to achieve project dependency isolation.
I will take a big Pom file or build.sbt over having to remember to enable the right installation of Python every time I switch projects any day.
What problem does this solve? Because it sounds like it is going to create quite a few new ones.
See the list of available caplets: http://www.capsule.io/caplets/