in invoker/core/src/main/java/com/google/cloud/functions/invoker/runner/Invoker.java [139:177]
static Optional<Invoker> makeInvoker(Map<String, String> environment, String... args) {
Options options = new Options();
JCommander jCommander = JCommander.newBuilder().addObject(options).build();
try {
jCommander.parse(args);
} catch (ParameterException e) {
usage(jCommander);
throw e;
}
if (options.help) {
usage(jCommander);
return Optional.empty();
}
int port;
try {
port = Integer.parseInt(options.port);
} catch (NumberFormatException e) {
System.err.println("--port value should be an integer: " + options.port);
usage(jCommander);
throw e;
}
String functionTarget = options.target;
Path standardFunctionJarPath = Paths.get("function/function.jar");
Optional<String> functionClasspath =
Arrays.asList(
options.classPath,
environment.get("FUNCTION_CLASSPATH"),
Files.exists(standardFunctionJarPath) ? standardFunctionJarPath.toString() : null)
.stream()
.filter(Objects::nonNull)
.findFirst();
ClassLoader functionClassLoader = makeClassLoader(functionClasspath);
Invoker invoker =
new Invoker(
port, functionTarget, environment.get("FUNCTION_SIGNATURE_TYPE"), functionClassLoader);
return Optional.of(invoker);
}