Skip to content

Commit 9fdded8

Browse files
committed
fix(#4): exceptions in native executable
1 parent 48d8b53 commit 9fdded8

File tree

5 files changed

+109
-12
lines changed

5 files changed

+109
-12
lines changed

.github/workflows/build.yaml

+6-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,12 @@ jobs:
8585
- name: Compile to native binary
8686
run: |
8787
mv aidbox-sdk.jar source.jar
88-
native-image -jar ./source.jar --no-fallback --no-server aidbox-sdk-${{ matrix.os }}
88+
native-image -jar ./source.jar \
89+
-march=native \
90+
--no-fallback \
91+
--features=clj_easy.graal_build_time.InitClojureClasses \
92+
-H:ReflectionConfigurationFiles=reflect-config.json \
93+
aidbox-sdk-${{ matrix.os }}
8994
9095
- name: Upload amd64 binary artifact
9196
uses: actions/upload-artifact@v4

build.clj

+11-9
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@
88
(b/delete {:path "target"}))
99

1010
(defn uberjar [{:keys [jar-name]
11-
:or {jar-name "aidbox-sdk"}}]
12-
11+
:or {jar-name "aidbox-sdk"}}]
1312
(clean nil)
1413

15-
(b/copy-dir {:src-dirs ["src" "resources"]
14+
(b/copy-dir {:src-dirs ["src" "resources"]
1615
:target-dir class-dir})
1716

18-
(b/compile-clj {:basis basis
17+
(b/compile-clj {:basis basis
1918
:ns-compile '[aidbox-sdk.core]
20-
:class-dir class-dir})
19+
:class-dir class-dir})
20+
21+
(let [jar-path (str "target/" jar-name ".jar")]
22+
(b/uber {:class-dir class-dir
23+
:uber-file jar-path
24+
:basis basis
25+
:main 'aidbox-sdk.core})
2126

22-
(b/uber {:class-dir class-dir
23-
:uber-file (str "target/" jar-name ".jar")
24-
:basis basis
25-
:main 'aidbox-sdk.core}))
27+
(println "Building complete. Uberjar is available at:" jar-path)))

deps.edn

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{:paths ["src"]
2-
:deps {com.github.clj-easy/graal-build-time {:mvn/version "0.1.4"}
2+
:deps {org.clojure/data.json {:mvn/version "2.5.0"}
3+
4+
com.github.clj-easy/graal-build-time {:mvn/version "1.0.5"}
35
org.clojure/clojure {:mvn/version "1.11.3"}
4-
org.clojure/data.json {:mvn/version "2.5.0"}
56
org.clojure/tools.cli {:mvn/version "1.1.230"}}
67

78
:aliases

reflect-config.json

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
[
2+
{
3+
"name": "clojure.lang.APersistentSet",
4+
"methods": [
5+
{
6+
"name": "contains",
7+
"parameterTypes": [
8+
"java.lang.Object"
9+
]
10+
}
11+
]
12+
},
13+
{
14+
"name": "clojure.lang.APersistentVector",
15+
"methods": [
16+
{
17+
"name": "contains",
18+
"parameterTypes": [
19+
"java.lang.Object"
20+
]
21+
}
22+
]
23+
},
24+
{
25+
"name": "clojure.lang.PersistentHashSet",
26+
"queryAllPublicMethods": true
27+
},
28+
{
29+
"name": "clojure.lang.PersistentVector",
30+
"queryAllPublicMethods": true
31+
},
32+
{
33+
"name": "java.io.BufferedReader",
34+
"queryAllPublicMethods": true,
35+
"methods": [
36+
{
37+
"name": "close",
38+
"parameterTypes": []
39+
}
40+
]
41+
},
42+
{
43+
"name": "java.io.File",
44+
"queryAllPublicMethods": true,
45+
"methods": [
46+
{
47+
"name": "getName",
48+
"parameterTypes": []
49+
},
50+
{
51+
"name": "isDirectory",
52+
"parameterTypes": []
53+
},
54+
{
55+
"name": "mkdir",
56+
"parameterTypes": []
57+
}
58+
]
59+
},
60+
{
61+
"name": "java.lang.reflect.Method",
62+
"methods": [
63+
{
64+
"name": "canAccess",
65+
"parameterTypes": [
66+
"java.lang.Object"
67+
]
68+
}
69+
]
70+
},
71+
{
72+
"name": "java.util.concurrent.atomic.AtomicBoolean",
73+
"fields": [
74+
{
75+
"name": "value"
76+
}
77+
]
78+
},
79+
{
80+
"name": "java.util.concurrent.atomic.AtomicReference",
81+
"fields": [
82+
{
83+
"name": "value"
84+
}
85+
]
86+
}
87+
]

src/aidbox_sdk/core.clj

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
[clojure.java.io :as io]
55
[aidbox-sdk.generator :as generator]))
66

7+
(set! *warn-on-reflection* true)
8+
79
(defn url
810
"Safe version of as-url function"
911
[s]

0 commit comments

Comments
 (0)