Skip to content

Instantly share code, notes, and snippets.

@nbeloglazov
Last active March 7, 2023 06:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nbeloglazov/11332612 to your computer and use it in GitHub Desktop.
Save nbeloglazov/11332612 to your computer and use it in GitHub Desktop.
Creates fat jar for jogl and gluegen.jar.
(ns quil-utils.packer
(:require [cemerick.pomegranate.aether :as p]
[clojure.java.io :as io])
(:import [java.util.zip ZipFile ZipEntry ZipOutputStream]
org.apache.commons.io.IOUtils))
(defn jars [artifact version]
(->> [[artifact version]]
(p/resolve-dependencies :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates)
(keys)
(remove #(= [artifact version] %))
(p/resolve-artifacts :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates)))
(defn get-output-path [base name]
(if (zero? (.indexOf name base))
name
(str base name)))
(defn copy [from to base skip-manifest?]
(when-not (empty? base)
(.putNextEntry to (ZipEntry. base)))
(let [from (ZipFile. from)]
(doseq [entry (enumeration-seq (.entries from))
:let [name (get-output-path base (.getName entry))]
:when (or (not skip-manifest?)
(-> name .toLowerCase (.contains "meta-inf") false?))]
(println name)
(.putNextEntry to (ZipEntry. name))
(IOUtils/copy (.getInputStream from entry) to))))
(defn process-jar [jar out]
(let [[name version & rst] jar
opts (apply hash-map rst)
file (-> jar meta :file)]
(if-let [[_ type] (->> (:classifier opts)
str
(re-find #"natives-(.+)" ))]
(copy file out (str "natives/" type "/") true)
(copy file out "" false))))
(defn fat-jar [artifact version out-name]
(with-open [out (ZipOutputStream. (io/output-stream (str out-name "-" version ".jar")))]
(doseq [jar (jars artifact version)]
(process-jar jar out))))
;(fat-jar 'org.jogamp.jogl/jogl-all-main "2.3.2" "jogl-fat")
;(fat-jar 'org.jogamp.gluegen/gluegen-rt-main "2.3.2" "gluegen-rt-fat")
(defproject quil-utils "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.0"]
[clj-commons/pomegranate "1.2.23"]
[commons-io "2.4"]])
@Empyreans
Copy link

Empyreans commented Jan 30, 2023

To update the script, I added the JogAmp repo to the :repositories:

line 10: (p/resolve-dependencies :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates)
line 13: (p/resolve-artifacts :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates)))

and updated the project dependencies to their latest version for good measure.
It works

@nbeloglazov
Copy link
Author

To update the script, I added the JogAmp repo to the :repositories:

line 10: (p/resolve-dependencies :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates) line 13: (p/resolve-artifacts :repositories {"JogAmp" "https://jogamp.org/deployment/maven/" "central" "https://repo1.maven.org/maven2/"} :coordinates)))

and updated the project dependencies to their latest version for good measure. It works

Thanks for the tips! Updated the script

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment