eweng / badigeon Goto Github PK
View Code? Open in Web Editor NEWA Clojure build library based on tools.deps.
A Clojure build library based on tools.deps.
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
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.
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)"}}
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)
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!
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})"
I have a jar dep with libFilename.so.0 and libFilename.so.1 etc, but those wont get extracted.
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
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.
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
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)
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.
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!
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/copy-dep-dependency
seems to call badigeon.bundle/copy-directory
with only 3 arguments, but it now requires 4 (version 1.6):
badigeon/src/badigeon/bundle.clj
Line 176 in 6928878
Does this library support merging of uberjar resources, such as data_readers.clj
?
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.
badigeon/src/badigeon/bundle.clj
Line 175 in eef05fc
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"}))
Thanks for this library, really useful.
I'm getting some resource conflict warnings that I think should be omitted. In my case, I get warnings for META-INF/MANIFEST.MF
and module-info.class
. depstar has a list of pattern to ignore when building an uberjar:
I think it makes sense to copy that behavior
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:
lib
.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
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 :) )
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.