@@ -258,12 +258,41 @@ private List<MavenRepo> allToMavenRepo(List<String> repos) {
258258 }
259259
260260 public Project build (String resource ) {
261- ResourceRef resourceRef = resolveChecked (getResourceResolver (), resource );
261+ ResourceRef resourceRef = resolveChecked (getResourceResolver (), resource , true );
262262 return build (resourceRef );
263263 }
264264
265265 private ResourceRef resolveChecked (ResourceResolver resolver , String resource ) {
266- Util .verboseMsg ("Resolving resource ref: " + resource );
266+ return resolveChecked (resolver , resource , false );
267+ }
268+
269+ /**
270+ * Resolves the given resource, with property resolution from project context
271+ * and handles retry on caching.
272+ *
273+ * Note: only enable property replacement if you know the resource is not
274+ * something that can be embedded/included directly in the project from users
275+ * data.
276+ *
277+ * i.e. jbang run someref${os.detected.os}.jar is ok but //FILES with
278+ * ${user.home} is definitely not.
279+ *
280+ * @param resolver
281+ * @param resource
282+ * @return
283+ */
284+ private ResourceRef resolveChecked (ResourceResolver resolver , String orginal_resource ,
285+ boolean propertyReplacement ) {
286+ final String resource = propertyReplacement
287+ ? PropertiesValueResolver .replaceProperties (orginal_resource , getContextProperties ())
288+ : orginal_resource ;
289+
290+ if (!resource .equals (orginal_resource )) {
291+ Util .verboseMsg ("Resolving resource ref: " + orginal_resource + " -> " + resource );
292+ } else {
293+ Util .verboseMsg ("Resolving resource ref:" + resource );
294+ }
295+
267296 boolean retryCandidate = catalogFile == null && !Util .isFresh () && Settings .getCacheEvict () > 0
268297 && (Catalog .isValidName (resource ) || Catalog .isValidCatalogReference (resource )
269298 || Util .isRemoteRef (resource ));
@@ -618,6 +647,7 @@ private ResourceResolver getAliasResourceResolver(Alias alias) {
618647 if (alias != null ) {
619648 updateFromAlias (alias );
620649 }
650+
621651 return new CombinedResourceResolver (
622652 new RenamingScriptResourceResolver (forceType ),
623653 new LiteralScriptResourceResolver (forceType ),
0 commit comments