Last active
March 7, 2023 06:49
-
-
Save nbeloglazov/11332612 to your computer and use it in GitHub Desktop.
Creates fat jar for jogl and gluegen.jar.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defproject quil-utils "0.1.0-SNAPSHOT" | |
:dependencies [[org.clojure/clojure "1.10.0"] | |
[clj-commons/pomegranate "1.2.23"] | |
[commons-io "2.4"]]) |
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
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