public static Path downloadAndCacheFile(String fileURL) throws IOException {
		Path saveDir = getUrlCacheDir(fileURL);
		Path metaSaveDir = getCacheMetaDir(saveDir);
		Path cachedFile = getCachedFile(saveDir);
		if (cachedFile == null || isEvicted(cachedFile)) {
			return downloadFileAndCache(fileURL, saveDir, metaSaveDir, cachedFile);
		} else {
			verboseMsg(String.format("Using cached file %s for remote %s", cachedFile, fileURL));
			return saveDir.resolve(cachedFile);
		}
	}
Either retrieves a previously downloaded file from the cache or downloads a
file from a URL and stores it in the cache.

@param fileURL HTTP URL of the file to be downloaded
@return Path to the downloaded file
@throws IOException
src/main/java/dev/jbang/util/Util.java