From 8ccc8e0790948dce9e814c6339cf4d30c4e00d59 Mon Sep 17 00:00:00 2001 From: dan sutton Date: Sat, 28 Aug 2021 00:59:05 -0500 Subject: [PATCH 1/2] Build from `clojure -T:build compile` and update deps ability to compile without lein and update fipp to fix a typehint bug in rbb --- build.clj | 8 ++++++++ deps.edn | 13 +++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 build.clj diff --git a/build.clj b/build.clj new file mode 100644 index 0000000..17ec5b5 --- /dev/null +++ b/build.clj @@ -0,0 +1,8 @@ +(ns build + (:refer-clojure :exclude [compile]) + (:require [clojure.tools.build.api :as b])) + +(defn compile + [_] + (b/javac {:src-dirs ["java"] + :class-dir "target/classes"})) diff --git a/deps.edn b/deps.edn index 9fc29aa..c42ca8d 100644 --- a/deps.edn +++ b/deps.edn @@ -1,5 +1,10 @@ -{:deps {org.clojure/clojure {:mvn/version "1.10.0"} - org.clojure/core.match {:mvn/version "0.3.0-alpha5"} +{:deps {org.clojure/clojure {:mvn/version "1.10.3"} + org.clojure/core.match {:mvn/version "1.0.0"} org.apache.bcel/bcel {:mvn/version "6.1"} - fipp {:mvn/version "0.6.12"}} - :paths ["src" "target/classes"]} + fipp/fipp {:mvn/version "0.6.24"}} + :paths ["src" "target/classes"] + :aliases {:build {:deps {io.github.clojure/tools.build {:git/tag "v0.1.9" :git/sha "6736c83"}} + :ns-default build}} + :deps/prep-lib {:alias :build + :fn compile + :ensure "target/classes"}} From c4a0b90251affb68a299e9b57843ea3430433e89 Mon Sep 17 00:00:00 2001 From: dan sutton Date: Sat, 28 Aug 2021 10:50:01 -0500 Subject: [PATCH 2/2] Build from clojure compile the java agent class: `clojure -T:build compile` or if consuming as a dep, `clojure -X:deps prep` should prepare the class. create a jar: `clojure -T:build jar` --- README.md | 6 +++--- build.clj | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 420aba5..6c7baee 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Leiningen: # Usage: -Use `lein javac` to AOT compile `clojure.tools.decompiler.RetrieveClasses` then you can use `lein repl` or `clj` to launch a repl +Use `lein javac` or `clojure -T:build compile` to AOT compile `clojure.tools.decompiler.RetrieveClasses` then you can use `lein repl` or `clj` to launch a repl. Use `decompile-classfiles `to decompile AOT compiled classes: @@ -21,7 +21,7 @@ user=> (d/decompile-classfiles {:input-path "path/to/root/classes/directory" :ou [...] ``` -You can use `decompile-classes` to decompile in memory classes, but to do so you must start the JVM using the java agent provided with `tools.decompiler` (use e.g. `lein jar` to build the jar): +You can use `decompile-classes` to decompile in memory classes, but to do so you must start the JVM using the java agent provided with `tools.decompiler` (use e.g. `lein jar` or `clojure -T:build jar` to build the jar): ```clojure [~/src/tools.decompiler] clj -J-javaagent:tools.decompiler.jar @@ -29,7 +29,7 @@ user=> (require '[clojure.tools.decompiler :as d]) nil user=> (defn foo [a] a) #'user/foo -user=> (decompile-classes {:classes #{"user$foo"}}) ;; optionally :output-path to decompile to disk +user=> (d/decompile-classes {:classes #{"user$foo"}}) ;; optionally :output-path to decompile to disk Decompiling user$foo (fn foo ([a] a) diff --git a/build.clj b/build.clj index 17ec5b5..1a784d0 100644 --- a/build.clj +++ b/build.clj @@ -6,3 +6,12 @@ [_] (b/javac {:src-dirs ["java"] :class-dir "target/classes"})) + +(defn jar + [_] + (b/copy-dir {:target-dir "target/classes" + :src-dirs ["src"]}) + (compile {}) + (b/jar {:class-dir "target/classes" + :jar-file "tools.decompiler.jar" + :manifest {"Premain-Class" "clojure.tools.decompiler.RetrieveClasses"}}))