Coder Social home page Coder Social logo

badigeon's People

Contributors

eweng avatar gamlerhart avatar hlolli avatar kanwei avatar larkery avatar sundbp 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

badigeon's Issues

Bundle failed due to jar file name conflict

If I need to bundle some libraries where the library name and version is the same, the bundle will be failed. do we have some jar renaming stratergy should be applied to avoid this problem?

e.g.

{:deps {duct/core {:mvn/version "0.8.0"}
            ragtime/core {:mvn/version "0.8.0"}}

This will be failed since they both share the same jar name core-0.8.0.jar

tools.deps api change

Just wanted to drop a note that the newest version of tools.deps.alpha contains some api changes (moving towards getting out of alpha). So when you bump to tools.deps.alpha >= 0.9.745, you'll need to change your use of clojure.tools.deps.alpha.reader/slurp-deps to get that from clojure.tools.deps.alpha instead.

badigeon deploy not work

Hi. I've discovered that badigeon deploy now stop working.
Couple weeks ago I've deployed new lib on clojars using badigeon deploy and everything was fine. Now I can't do it with the same configs. Here is my opensource lib project
metrics

What I expect: badigeon deploy will deploy new version of my lib using this file build file

What I see:

metrics git:(master) clj -R:bg -A:deploy
Downloading: org/rssys/metrics/0.1.1/metrics-0.1.1.jar from https://repo.clojars.org/
Downloading: org/rssys/metrics/0.1.1/metrics-0.1.1.jar from https://repo.clojars.org/
Downloading: org/rssys/metrics/0.1.1/metrics-0.1.1.pom from https://repo.clojars.org/
Downloading: org/rssys/metrics/0.1.1/metrics-0.1.1.jar.asc from https://repo.clojars.org/
Downloading: org/rssys/metrics/0.1.1/metrics-0.1.1.pom.asc from https://repo.clojars.org/
Execution error (HttpResponseException) at org.eclipse.aether.transport.http.HttpTransporter/handleStatus (HttpTransporter.java:475).
Bad Request (400)

Here is a stack trace

{:clojure.main/message
 "Execution error (HttpResponseException) at org.eclipse.aether.transport.http.HttpTransporter/handleStatus (HttpTransporter.java:475).\nBad Request (400)\n",
 :clojure.main/triage
 {:clojure.error/class org.apache.http.client.HttpResponseException,
  :clojure.error/line 475,
  :clojure.error/cause "Bad Request (400)",
  :clojure.error/symbol
  org.eclipse.aether.transport.http.HttpTransporter/handleStatus,
  :clojure.error/source "HttpTransporter.java",
  :clojure.error/phase :execution},
 :clojure.main/trace
 {:via
  [{:type org.eclipse.aether.deployment.DeploymentException,
    :message
    "Failed to retrieve remote metadata org.rssys:metrics/maven-metadata.xml: Could not transfer metadata org.rssys:metrics/maven-metadata.xml from/to clojars (https://repo.clojars.org/): Bad Request (400)",
    :at
    [org.eclipse.aether.internal.impl.DefaultDeployer
     upload
     "DefaultDeployer.java"
     425]}
   {:type org.eclipse.aether.transfer.MetadataTransferException,
    :message
    "Could not transfer metadata org.rssys:metrics/maven-metadata.xml from/to clojars (https://repo.clojars.org/): Bad Request (400)",
    :at
    [org.eclipse.aether.connector.basic.MetadataTransportListener
     transferFailed
     "MetadataTransportListener.java"
     52]}
   {:type org.apache.http.client.HttpResponseException,
    :message "Bad Request (400)",
    :at
    [org.eclipse.aether.transport.http.HttpTransporter
     handleStatus
     "HttpTransporter.java"
     475]}],
  :trace
  [[org.eclipse.aether.transport.http.HttpTransporter
    handleStatus
    "HttpTransporter.java"
    475]
   [org.eclipse.aether.transport.http.HttpTransporter
    execute
    "HttpTransporter.java"
    300]
   [org.eclipse.aether.transport.http.HttpTransporter
    implGet
    "HttpTransporter.java"
    252]
   [org.eclipse.aether.spi.connector.transport.AbstractTransporter
    get
    "AbstractTransporter.java"
    67]
   [org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner
    runTask
    "BasicRepositoryConnector.java"
    453]
   [org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner
    run
    "BasicRepositoryConnector.java"
    360]
   [org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1
    run
    "RunnableErrorForwarder.java"
    75]
   [org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor
    execute
    "BasicRepositoryConnector.java"
    583]
   [org.eclipse.aether.connector.basic.BasicRepositoryConnector
    get
    "BasicRepositoryConnector.java"
    232]
   [org.eclipse.aether.internal.impl.DefaultDeployer
    upload
    "DefaultDeployer.java"
    395]
   [org.eclipse.aether.internal.impl.DefaultDeployer
    deploy
    "DefaultDeployer.java"
    307]
   [org.eclipse.aether.internal.impl.DefaultDeployer
    deploy
    "DefaultDeployer.java"
    223]
   [org.eclipse.aether.internal.impl.DefaultRepositorySystem
    deploy
    "DefaultRepositorySystem.java"
    384]
   [badigeon.deploy$deploy invokeStatic "deploy.clj" 87]
   [badigeon.deploy$deploy invoke "deploy.clj" 67]
   [build$deploy invokeStatic "build.clj" 199]
   [build$deploy invoke "build.clj" 180]
   [user$eval2873 invokeStatic "NO_SOURCE_FILE" 1]
   [user$eval2873 invoke "NO_SOURCE_FILE" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7132]
   [clojure.core$eval invokeStatic "core.clj" 3214]
   [clojure.main$eval_opt invokeStatic "main.clj" 488]
   [clojure.main$eval_opt invoke "main.clj" 482]
   [clojure.main$initialize invokeStatic "main.clj" 508]
   [clojure.main$null_opt invokeStatic "main.clj" 542]
   [clojure.main$null_opt invoke "main.clj" 539]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause "Bad Request (400)"}}

copying resources failing when dependency is :local/root

The only difference between success and failure is that my dependency for libcsound64 is defined with :local/root, I get the following stacktrace. I can bypass this by just uploading to a debug branch on git and test my local commits that way. I guess this could be worth looking into.

Exception in thread "main" java.nio.file.AccessDeniedException: target/panaeolus-0.4.0-SNAPSHOT/libcsound64/linux/x86_64/csound/plugins64-6.0
	at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
	at java.base/sun.nio.fs.UnixCopyFile.copyDirectory(UnixCopyFile.java:141)
	at java.base/sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:594)
	at java.base/sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:254)
	at java.base/java.nio.file.Files.copy(Files.java:1294)
	at badigeon.bundle$pre_visit_directory$fn__2343.invoke(bundle.clj:30)
	at badigeon.bundle$pre_visit_directory.invokeStatic(bundle.clj:29)
	at badigeon.bundle$pre_visit_directory.invoke(bundle.clj:27)
	at badigeon.uberjar$make_directory_file_visitor$reify__2549.preVisitDirectory(uberjar.clj:110)
	at java.base/java.nio.file.Files.walkFileTree(Files.java:2731)
	at badigeon.uberjar$copy_directory.invokeStatic(uberjar.clj:127)
	at badigeon.uberjar$copy_directory.invoke(uberjar.clj:120)
	at badigeon.uberjar$copy_dependency.invokeStatic(uberjar.clj:139)
	at badigeon.uberjar$copy_dependency.invoke(uberjar.clj:132)
	at badigeon.uberjar$bundle$fn__2572.invoke(uberjar.clj:174)
	at badigeon.uberjar$bundle.invokeStatic(uberjar.clj:171)
	at badigeon.uberjar$bundle.invoke(uberjar.clj:141)
	at build2$_main.invokeStatic(build2.clj:23)
	at build2$_main.invoke(build2.clj:13)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.Var.applyTo(Var.java:705)
	at clojure.core$apply.invokeStatic(core.clj:665)
	at clojure.main$main_opt.invokeStatic(main.clj:491)
	at clojure.main$main_opt.invoke(main.clj:487)
	at clojure.main$main.invokeStatic(main.clj:598)
	at clojure.main$main.doInvoke(main.clj:561)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.lang.Var.applyTo(Var.java:705)
	at clojure.main.main(main.java:37)

uberjar with AOT?

Cool library, thanks!

I'm trying to use this to eventually have a blah-0.0.1-SNAPSHOT-uber.jar, with just one file that I can run java -jar blah-0.0.1-SNAPSHOT-uber.jar on. Using bundle gets me to a spot where all the things seem to be there, but the final uberjar isn't built yet. Can you provide some guidance as to how to finish this?

Thanks!

Any support on :local/root dependency?

Currently, badigeon will not bundle local dependency any chance to support this?

sample code

mkdir project
cd project/
echo '{:deps {sample/sample {:local/root "module/sample"}}}' > deps.edn
mkdir -p module/sample/src
echo '(ns sample)' > module/sample/src/sample.clj
echo '{:paths ["src"]}' > module/sample/deps.edn

clojure -Sdeps '{:deps {badigeon/badigeon {:mvn/version "0.0.12"}}}' -e "(require '[badigeon.bundle :as bundle]) (bundle/bundle \"target/project\" {:allow-unstable-deps? true})"

possible bug when copying conflict classes

Hello.

I made a clj-new project template based on badigeon https://github.com/mikeananev/sapp
Using this template to build big project I've encountered an error during the uberjar building.
To reproduce problem I created simple project https://github.com/mikeananev/bugapp.
This project uses two building tools: cambada and badigeon.
If you look inside uberjar produced by cambada then you will see much more classes in folder org/objectweb/asm. in Badigeon version of uberjar folder org/objectweb/asm has a few of them.
I can't detect the place where badigeon ignores classes and not copy them.

Steps to reproduce problem:
0. clone the project https://github.com/mikeananev/bugapp

  1. If I build uberjar using cambada and run uberjar, then everything works fine.

clj -A:build
java -jar target/app-0.1.0-standalone.jar
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
system started.

  1. But if I use badigeon then not all classes are copied into uberjar.

clj -R:bg -A:uberjar
java -jar target/app-0.1.0-SNAPSHOT-standalone.jar
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at clojure.tools.analyzer.passes.jvm.validate_loop_locals$loading__6721__auto____2293.invoke(validate_loop_locals.clj:9)
at clojure.tools.analyzer.passes.jvm.validate_loop_locals__init.load(Unknown Source)
at clojure.tools.analyzer.passes.jvm.validate_loop_locals__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5989)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at clojure.tools.analyzer.passes.jvm.warn_on_reflection$loading__6721__auto____2291.invoke(warn_on_reflection.clj:9)
at clojure.tools.analyzer.passes.jvm.warn_on_reflection__init.load(Unknown Source)
at clojure.tools.analyzer.passes.jvm.warn_on_reflection__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at clojure.core.async.impl.ioc_macros$loading__6721__auto____1691.invoke(ioc_macros.clj:12)
at clojure.core.async.impl.ioc_macros__init.load(Unknown Source)
at clojure.core.async.impl.ioc_macros__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at clojure.core.async$loading__6721__auto____1221.invoke(async.clj:9)
at clojure.core.async__init.load(Unknown Source)
at clojure.core.async__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at taoensso.sente$loading__6721__auto____1219.invoke(sente.cljc:1)
at taoensso.sente__init.load(Unknown Source)
at taoensso.sente__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at qwerty.app.websocket$loading__6721__auto____151.invoke(websocket.clj:1)
at qwerty.app.websocket__init.load(Unknown Source)
at qwerty.app.websocket__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)

at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn__6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at qwerty.app.core$loading__6721__auto____149.invoke(core.clj:1)
at qwerty.app.core__init.load(Unknown Source)
at qwerty.app.core__init.<clinit>(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForName(RT.java:2220)
at clojure.lang.RT.loadClassForName(RT.java:2239)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:384)
at clojure.lang.Util.loadWithClass(Util.java:251)
at qwerty.app.core.<clinit>(Unknown Source)

Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:416)
at clojure.lang.RT.classForName(RT.java:2211)
at clojure.lang.RT.classForNameNonLoading(RT.java:2224)
at clojure.tools.analyzer.jvm.utils$loading__6721__auto____2295.invoke(utils.clj:9)
at clojure.tools.analyzer.jvm.utils__init.load(Unknown Source)
at clojure.tools.analyzer.jvm.utils__init.(Unknown Source)
... 196 more

Use os file separator?

I'm trying to run overtone on windows, and it seems some problems come from hard-coded "/" in badigeon, for example in bundle.clj

This pattern appears in several places:

(utils/make-path "/" native-prefix)

If I replace it with this in windows, it seems to run better (in the sense that I get another exception that seems unrelated to badigeon).

(utils/make-path "\" native-prefix)

Additional POM elements?

Is there any way to inject additional pom metadata elements into the generated pom when using jar? I'm trying to generate a maven-central compatible POM; they require some additional elements, e.g.: name description license url scm, developers, etc (see reference)

Clojars understands and uses some of these fields also. e.g. it can link to websites or github repositories in their web interface if url and/or scm is supplied.

Thanks for this wonderful lib; it's the only thing I've found that can properly package library (not app!) jars for deps.edn-based projects.

How to use badigeon?

I tried to follow the sample.clj file, but I'm struggling. I'm only trying to include a single .java file in my Clojure build using deps.edn.

This does not seem to work:

{:paths   ["src/main/clojure" "src/test"]
 :deps    {org.clojure/clojure {:mvn/version "1.10.1"}}
 :aliases {:build {:extra-paths "src/main/java"
                   :extra-deps  {badigeon/badigeon {:mvn/version "1.0"}}}
           :test  {:deps {midje {:mvn/version "1.5.0"}}}}}

A bare-bones hello world example with a .clj file and a .java file would go a long way :). Thanks!

Help with strange behaviour

Still I'm struggling with panaeolus, this time on Windows (and this bug was there since some time but only causes problems on runtime)

In short, I define either the newest version of clojure.core/async in deps.edn or the newest git, somehow an ancient version of clojure.core/async gets bundled.

Given the following clojure -Stree

org.clojure/clojure 1.10.0
  org.clojure/core.specs.alpha 0.2.44
  org.clojure/spec.alpha 0.2.176
expound/expound 0.7.2
com.google.inject/guice 4.2.2
  javax.inject/javax.inject 1
  com.google.guava/guava 25.1-android
    com.google.errorprone/error_prone_annotations 2.1.3
    org.codehaus.mojo/animal-sniffer-annotations 1.14
    org.checkerframework/checker-compat-qual 2.0.0
    com.google.j2objc/j2objc-annotations 1.1
    com.google.code.findbugs/jsr305 3.0.2
  aopalliance/aopalliance 1.0
rksm/subprocess 0.1.3
overtone/ableton-link 1.0.0-beta11
  commons-io/commons-io 2.6
  org.clojure/data.priority-map 0.0.9
techascent/tech.jna 3.18
  org.clojure/tools.logging 0.4.1
  techascent/tech.resource 4.5
panaeolus/libcsound64 https://github.com/panaeolus/libcsound64.git 9d9625d
  cpath-clj/cpath-clj 0.1.2
    org.clojure/java.classpath 0.2.2
  jack2/jack2 https://github.com/panaeolus/jack2.git e5d454e
com.kunstmusik/CsoundJNA 1.0.1
  net.java.dev.jna/jna-platform 5.3.0
instaparse/instaparse 1.4.9
net.java.dev.jna/jna 5.3.1
nrepl/nrepl 0.6.0
badigeon/badigeon https://github.com/EwenG/badigeon.git 1e28b19
  org.clojure/tools.deps.alpha 0.7.516
    org.springframework.build/aws-maven 5.0.0.RELEASE
    org.clojure/tools.cli 0.3.5
    org.apache.maven.resolver/maven-resolver-transport-wagon 1.1.1
      org.apache.maven.wagon/wagon-provider-api 3.0.0
    org.apache.maven.resolver/maven-resolver-transport-http 1.1.1
      org.slf4j/jcl-over-slf4j 1.7.25
        org.slf4j/slf4j-api 1.7.25
      org.apache.httpcomponents/httpcore 4.4.8
      org.apache.httpcomponents/httpclient 4.5.4
        commons-codec/commons-codec 1.10
    org.apache.maven.resolver/maven-resolver-transport-file 1.1.1
    org.apache.maven/maven-core 3.5.2
      org.codehaus.plexus/plexus-component-annotations 1.7.1
      org.eclipse.sisu/org.eclipse.sisu.plexus 0.3.3
        javax.enterprise/cdi-api 1.0
          javax.annotation/jsr250-api 1.0
      org.apache.maven/maven-settings-builder 3.5.2
        org.sonatype.plexus/plexus-sec-dispatcher 1.4
          org.sonatype.plexus/plexus-cipher 1.4
      org.apache.maven/maven-settings 3.5.2
      org.apache.maven.shared/maven-shared-utils 3.1.0
      org.codehaus.plexus/plexus-classworlds 2.5.2
      com.google.inject/guice$no_aop 4.0
      org.eclipse.sisu/org.eclipse.sisu.inject 0.3.3
      org.apache.maven/maven-builder-support 3.5.2
      org.apache.maven/maven-plugin-api 3.5.2
      org.apache.maven/maven-artifact 3.5.2
    org.apache.maven.resolver/maven-resolver-api 1.1.1
    org.apache.maven/maven-resolver-provider 3.5.2
      org.apache.commons/commons-lang3 3.5
      org.apache.maven/maven-model-builder 3.5.2
        org.codehaus.plexus/plexus-interpolation 1.24
      org.codehaus.plexus/plexus-utils 3.1.0
      org.apache.maven/maven-model 3.5.2
      org.apache.maven/maven-repository-metadata 3.5.2
    org.clojure/data.xml 0.2.0-alpha5
      org.clojure/data.codec 0.1.0
    org.apache.maven.resolver/maven-resolver-spi 1.1.1
    org.slf4j/slf4j-nop 1.6.2
    s3-wagon-private/s3-wagon-private 1.3.1
      com.fasterxml.jackson.core/jackson-databind 2.5.5
        com.fasterxml.jackson.core/jackson-annotations 2.5.0
      com.fasterxml.jackson.core/jackson-core 2.5.5
      com.amazonaws/aws-java-sdk-s3 1.11.184
        com.amazonaws/jmespath-java 1.11.184
        com.amazonaws/aws-java-sdk-core 1.11.184
          joda-time/joda-time 2.8.1
          com.fasterxml.jackson.dataformat/jackson-dataformat-cbor 2.6.7
          software.amazon.ion/ion-java 1.0.2
          commons-logging/commons-logging 1.1.3
        com.amazonaws/aws-java-sdk-kms 1.11.184
    org.clojure/tools.gitlibs 0.2.64
      com.jcraft/jsch.agentproxy.jsch 0.0.9
      org.eclipse.jgit/org.eclipse.jgit 4.10.0.201712302008-r
        com.googlecode.javaewah/JavaEWAH 1.1.6
        com.jcraft/jsch 0.1.54
      com.jcraft/jsch.agentproxy.connector-factory 0.0.9
        com.jcraft/jsch.agentproxy.sshagent 0.0.9
        com.jcraft/jsch.agentproxy.usocket-jna 0.0.9
        com.jcraft/jsch.agentproxy.pageant 0.0.9
        com.jcraft/jsch.agentproxy.core 0.0.9
        com.jcraft/jsch.agentproxy.usocket-nc 0.0.9
    org.apache.maven.resolver/maven-resolver-connector-basic 1.1.1
    org.apache.maven.resolver/maven-resolver-impl 1.1.1
    org.apache.maven.resolver/maven-resolver-util 1.1.1
org.jaudiolibs/jnajack 1.3.0
org.clojure/core.async https://github.com/clojure/core.async.git 300d6e1
  org.clojure/tools.analyzer.jvm 0.7.2
    org.clojure/tools.analyzer 0.6.9
    org.clojure/tools.reader 1.0.0-beta4
    org.clojure/core.memoize 0.5.9
      org.clojure/core.cache 0.6.5
    org.ow2.asm/asm-all 4.2

It's clear that I have here the latest git defined.

But when I run the jar I get

Syntax error macroexpanding clojure.core/refer-clojure at (clojure/core/async.clj:9:1)
 clojure.lang.ExceptionInfo: Call to clojure.core/refer-clojure did not conform to spec

This is from a very old core.async namespace, then if I clean C:\Users\User\.m2\repository\org\clojure\core.async and run build2.clj (bundle script) I see this

> $env:COMPILING_PANAEOLUS = '1'; clojure -A:jar -m build2
Could not find any internals in C:\Users\User\AppData\Roaming\panaeolus\Cache\csound-6.13/jack!
Could not find any internals in driver directory!
`default' server already active
Failed to open server
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
Drivers/internals found in : C:\Users\User\AppData\Roaming\panaeolus\Cache\csound-6.13
Drivers/internals found in : C:\Users\User\AppData\Roaming\panaeolus\Cache\csound-6.13
Downloading: org/clojure/core.async/0.1.346.0-17112a-alpha/core.async-0.1.346.0-17112a-alpha.pom from https://repo1.maven.org/maven2/
Downloading: org/clojure/core.async/0.1.346.0-17112a-alpha/core.async-0.1.346.0-17112a-alpha.jar from https://repo1.maven.org/maven2/

I already tried deleting .cpcache, but I have no clue where that core.async 0.1.346.0 is defined, it does not appear on the classpath from clojure -Spath. Do you know what could cause this?

badigeon.bundle/bundle should accept :aliases in some ways

I am facing an issue, I have no way to inlcude aliases' :extra-paths :extra-deps to bundle, so I cannot include *.clj and *.jar specified in aliases.

resolved-deps (deps/resolve-deps deps-map nil)

minimum example

; deps.edn
{:paths ["src"]
 :deps {badigeon/badigeon {...}}
 :aliases {:nice {:extra-deps {expound {...}}}}}

; badigeon call, no way to include deps in aliases "nice"
(require '[badigeon.bundle :as bundle]
         '[clojure.tools.deps.alpha.reader :as deps-reader])

(bundle/bundle "target/app"
               (let [deps-map (deps-reader/slurp-deps "deps.edn")
                 {:deps-map deps-map
                  :allow-unstable-deps? true
                  :libs-path "lib"}))

Getting a completely AOT'ed uberjar

This is like #3 - except I can't get it to work. I want no .clj files, ultimately. Not from dependencies or my code. badigeon.uberjar/bundle does not compile, so:

With this in user.clj:

(clean/clean "target")

(compile/compile '[play.core clojure.core clojure.main]
  {:compile-path     "target/classes"
   :compiler-options {:disable-locals-clearing false
                      :elide-meta              [:doc :file :line :added]
                      :direct-linking          true}
   :classpath        (classpath/make-classpath)}) 

(compile/extract-classes-from-dependencies
  {:out-path             "target/classes"
   :deps-map             (deps-reader/slurp-deps "deps.edn")
   :allow-unstable-deps? true})

And trying to invoke Java using the generates classes, I get:

$ java -cp target/classes play.core
Exception in thread "main" java.lang.ExceptionInInitializerError
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at clojure.lang.RT.classForName(RT.java:2211)
	at clojure.lang.RT.classForName(RT.java:2220)
	at clojure.lang.RT.loadClassForName(RT.java:2239)
	at clojure.lang.RT.load(RT.java:449)
	at clojure.lang.RT.load(RT.java:424)
	at clojure.lang.RT.<clinit>(RT.java:338)
	at clojure.lang.Namespace.<init>(Namespace.java:34)
	at clojure.lang.Namespace.findOrCreate(Namespace.java:176)
	at clojure.lang.Var.internPrivate(Var.java:156)
	at play.core.<clinit>(Unknown Source)
Caused by: java.lang.NullPointerException
	at clojure.core$fn__8493$fn__8494.invoke(core.clj:7055)
	at clojure.core$fn__8493.invokeStatic(core.clj:7055)
	at clojure.core$fn__8493.invoke(core.clj:7055)
	at clojure.core__init.load(Unknown Source)
	at clojure.core__init.<clinit>(Unknown Source)

This did work:

  • Copying the Clojure libs manually to lib.
  • Excluding Clojure from compile/extract-classes-from-dependencies with :excluded-libs #{'org.clojure/clojure 'org.clojure/spec.alpha 'org.clojure/core.specs.alpha}

But it's not an uberjar, of course:

java -cp target/classes:lib/clojure-1.10.1.jar:lib/spec.alpha-0.2.176.jar:lib/core.specs.alpha-0.2.44.jar play.core

Provide a slurp-edn function that looks into the resource paths as well?

Hi again,

I've implemented a native library spitter (just like was already implemented in Overtone before I started hacking with it). But I had a problem with the slurp-deps function. After I made a jar, I realized that it only looked with io/file but not io/resource, so I copied over some of the function to make it work inside a jar on a classpath and as a file

https://github.com/overtone/overtone/blob/master/src/overtone/jna_path.clj#L10-L45

So it would basically be a request, to provide some sort of function that finds the current deps.edn no matter where it's located? (given that it can only be located in a jarfile or on disk :) )

Deterministic class file generation

Hi

And thanks for a great library!

I noticed that the generated class files are not identical on repeated builds. Why is this?
My guess is that this happens deep down the Clojure compiler somewhere.

I've reproduced the issue at ivarref/badigeon-debug and the output looks like this:

$ cat build/package.clj 
(ns package
  (:require [badigeon.bundle :refer [bundle make-out-path]]
            [badigeon.compile :as c]
            [badigeon.clean :as clean]))

(defn -main []
  (clean/clean "target")
  (c/compile 'myapp.core {:compile-path "target/classes-1"})
  (c/compile 'myapp.core {:compile-path "target/classes-2"}))

$ clojure -A:build -m package

$ diff --brief --recursive target/classes-1 target/classes-2 | head -n10
Files target/classes-1/byte_streams/char_sequence$decode_byte_source.class and target/classes-2/byte_streams/char_sequence$decode_byte_source.class differ
Files target/classes-1/byte_streams/char_sequence$decode_byte_source$reify__3134.class and target/classes-2/byte_streams/char_sequence$decode_byte_source$reify__3134.class differ
Files target/classes-1/byte_streams/char_sequence$lazy_char_buffer_sequence.class and target/classes-2/byte_streams/char_sequence$lazy_char_buffer_sequence.class differ
Files target/classes-1/byte_streams/char_sequence$lazy_char_buffer_sequence$fn__3124.class and target/classes-2/byte_streams/char_sequence$lazy_char_buffer_sequence$fn__3124.class differ
Files target/classes-1/byte_streams/graph/ConversionGraph$fn__2655.class and target/classes-2/byte_streams/graph/ConversionGraph$fn__2655.class differ
Files target/classes-1/byte_streams/graph/ConversionGraph$fn__2655$fn__2656.class and target/classes-2/byte_streams/graph/ConversionGraph$fn__2655$fn__2656.class differ
Files target/classes-1/byte_streams/graph$closeable_seq.class and target/classes-2/byte_streams/graph$closeable_seq.class differ
Files target/classes-1/byte_streams/graph$closeable_seq$reify__2745.class and target/classes-2/byte_streams/graph$closeable_seq$reify__2745.class differ
Files target/classes-1/byte_streams/graph$conversion_fn$fn__2755.class and target/classes-2/byte_streams/graph$conversion_fn$fn__2755.class differ
Files target/classes-1/byte_streams/graph$conversion_fn$fn__2755$fn__2756.class and target/classes-2/byte_streams/graph$conversion_fn$fn__2755$fn__2756.class differ

Any idea why this is so, and if so how to fix it?

Thanks and kind regards.

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.