Source:
public static void runNodeUpdater(PluginAdapterBuild adapter) throws ExecutionFailedException, RuntimeException { Set<File> jarFiles = adapter.getJarFiles(); File flowResourcesFolder = new File(adapter.npmFolder(), DEFAULT_FLOW_RESOURCES_FOLDER); final URI nodeDownloadRootURI; try { nodeDownloadRootURI = new URI(adapter.nodeDownloadRoot()); } catch (URISyntaxException e) { throw new RuntimeException("Failed to parse " + adapter.nodeDownloadRoot(), e); } ClassFinder classFinder = adapter.getClassFinder(); Lookup lookup = adapter.createLookup(classFinder); new NodeTasks.Builder(lookup, adapter.npmFolder(), adapter.generatedFolder(), adapter.frontendDirectory()) .runNpmInstall(adapter.runNpmInstall()) .withWebpack(adapter.webpackOutputDirectory(), adapter.servletResourceOutputDirectory(), adapter.webpackTemplate(), adapter.webpackGeneratedTemplate(), adapter.serviceWorkerTemplate()) .useV14Bootstrap(adapter.isUseDeprecatedV14Bootstrapping()) .enablePackagesUpdate(true) .useByteCodeScanner(adapter.optimizeBundle()) .withFlowResourcesFolder(flowResourcesFolder) .copyResources(jarFiles) .copyLocalResources(adapter.frontendResourcesDirectory()) .enableImportsUpdate(true) .withEmbeddableWebComponents(adapter.generateEmbeddableWebComponents()) .withTokenFile(BuildFrontendUtil.getTokenFile(adapter)) .enablePnpm(adapter.pnpmEnable()) .withConnectApplicationProperties(adapter.applicationProperties()) .withConnectJavaSourceFolder(adapter.javaSourceFolder()) .withConnectGeneratedOpenApiJson(adapter.openApiJsonFile()) .withConnectClientTsApiFolder(adapter.generatedTsFolder()) .withHomeNodeExecRequired(adapter.requireHomeNodeExec()) .withNodeVersion(adapter.nodeVersion()) .withNodeDownloadRoot(nodeDownloadRootURI) .build() .execute(); }

Target:
public static void runNodeUpdater(PluginAdapterBuild adapter) throws ExecutionFailedException { Set<File> jarFiles = adapter.getJarFiles(); File flowResourcesFolder = new File(adapter.npmFolder(), DEFAULT_FLOW_RESOURCES_FOLDER); final URI nodeDownloadRootURI; try { nodeDownloadRootURI = new URI(adapter.nodeDownloadRoot()); } catch (URISyntaxException e) { throw new RuntimeException("Failed to parse " + adapter.nodeDownloadRoot(), e); } ClassFinder classFinder = adapter.getClassFinder(); Lookup lookup = adapter.createLookup(classFinder); new NodeTasks.Builder(lookup, adapter.npmFolder(), adapter.generatedFolder(), adapter.frontendDirectory()) .runNpmInstall(adapter.runNpmInstall()) .withWebpack(adapter.webpackOutputDirectory(), adapter.servletResourceOutputDirectory(), adapter.webpackTemplate(), adapter.webpackGeneratedTemplate(), adapter.serviceWorkerTemplate()) .useV14Bootstrap(adapter.isUseDeprecatedV14Bootstrapping()) .enablePackagesUpdate(true) .useByteCodeScanner(adapter.optimizeBundle()) .withFlowResourcesFolder(flowResourcesFolder) .copyResources(jarFiles) .copyLocalResources(adapter.frontendResourcesDirectory()) .enableImportsUpdate(true) .withEmbeddableWebComponents(adapter.generateEmbeddableWebComponents()) .withTokenFile(BuildFrontendUtil.getTokenFile(adapter)) .enablePnpm(adapter.pnpmEnable()) .withConnectApplicationProperties(adapter.applicationProperties()) .withConnectJavaSourceFolder(adapter.javaSourceFolder()) .withConnectGeneratedOpenApiJson(adapter.openApiJsonFile()) .withConnectClientTsApiFolder(adapter.generatedTsFolder()) .withHomeNodeExecRequired(adapter.requireHomeNodeExec()) .withNodeVersion(adapter.nodeVersion()) .withNodeDownloadRoot(nodeDownloadRootURI) .build() .execute(); }