@@ -89,6 +89,10 @@ object JlinkPlugin extends AutoPlugin {
89
89
module
90
90
}.distinct
91
91
},
92
+ jlinkModulePath := (jlinkModulePath ?? Nil ).value,
93
+ jlinkModulePath ++= {
94
+ fullClasspath.in(jlinkBuildImage).value.map(_.data)
95
+ },
92
96
jlinkOptions := (jlinkOptions ?? Nil ).value,
93
97
jlinkOptions ++= {
94
98
val modules = jlinkModules.value
@@ -97,7 +101,11 @@ object JlinkPlugin extends AutoPlugin {
97
101
sys.error(" jlinkModules is empty" )
98
102
}
99
103
100
- JlinkOptions (addModules = modules, output = Some (target.in(jlinkBuildImage).value))
104
+ JlinkOptions (
105
+ addModules = modules,
106
+ output = Some (target.in(jlinkBuildImage).value),
107
+ modulePath = jlinkModulePath.value
108
+ )
101
109
},
102
110
jlinkBuildImage := {
103
111
val log = streams.value.log
@@ -129,25 +137,28 @@ object JlinkPlugin extends AutoPlugin {
129
137
.pair(file => IO .relativize(dir, file))
130
138
131
139
private def runJavaTool (jvm : Option [File ], log : Logger )(exeName : String , args : Seq [String ]): ProcessBuilder = {
132
- val exe = jvm match {
133
- case None => exeName
134
- case Some (jh) => (jh / " bin" / exeName).getAbsolutePath
135
- }
140
+ val jh = jvm.getOrElse(file(sys.props.getOrElse(" java.home" , sys.error(" no java.home" ))))
141
+ val exe = (jh / " bin" / exeName).getAbsolutePath
136
142
137
143
log.info(" Running: " + (exe +: args).mkString(" " ))
138
144
139
145
Process (exe, args)
140
146
}
141
147
142
148
private object JlinkOptions {
149
+ @ deprecated(" 1.3.24" , " " )
143
150
def apply (addModules : Seq [String ] = Nil , output : Option [File ] = None ): Seq [String ] =
151
+ apply(addModules = addModules, output = output, modulePath = Nil )
152
+
153
+ def apply (addModules : Seq [String ], output : Option [File ], modulePath : Seq [File ]): Seq [String ] =
144
154
option(" --output" , output) ++
145
- list(" --add-modules" , addModules)
155
+ list(" --add-modules" , addModules) ++
156
+ list(" --module-path" , modulePath)
146
157
147
158
private def option [A ](arg : String , value : Option [A ]): Seq [String ] =
148
159
value.toSeq.flatMap(a => Seq (arg, a.toString))
149
160
150
- private def list (arg : String , values : Seq [String ]): Seq [String ] =
161
+ private def list [ A ] (arg : String , values : Seq [A ]): Seq [String ] =
151
162
if (values.nonEmpty) Seq (arg, values.mkString(" ," )) else Nil
152
163
}
153
164
@@ -204,5 +215,22 @@ object JlinkPlugin extends AutoPlugin {
204
215
val nothing : ((String , String )) => Boolean = Function .const(false )
205
216
val everything : ((String , String )) => Boolean = Function .const(true )
206
217
def only (dependencies : (String , String )* ): ((String , String )) => Boolean = dependencies.toSet.contains
218
+
219
+ /** This matches pairs by their respective ''package'' prefixes. This means that `"foo.bar"`
220
+ * matches `"foo.bar"`, `"foo.bar.baz"`, but not `"foo.barqux"`. Empty
221
+ * string matches anything.
222
+ */
223
+ def byPackagePrefix (prefixPairs : (String , String )* ): ((String , String )) => Boolean = {
224
+ case (a, b) =>
225
+ prefixPairs.exists {
226
+ case (prefixA, prefixB) =>
227
+ packagePrefixMatches(prefixA, a) && packagePrefixMatches(prefixB, b)
228
+ }
229
+ }
230
+
231
+ private def packagePrefixMatches (prefix : String , s : String ): Boolean =
232
+ prefix.isEmpty ||
233
+ s == prefix ||
234
+ s.startsWith(prefix + " ." )
207
235
}
208
236
}
0 commit comments