public static synchronized TransformServiceLauncher forProject(
      @Nullable String projectName, int port, @Nullable String pythonRequirementsFile)
      throws IOException {
    if (projectName == null || projectName.isEmpty()) {
      projectName = DEFAULT_PROJECT_NAME;
    }
    if (!launchers.containsKey(projectName)) {
      launchers.put(
          projectName, new TransformServiceLauncher(projectName, port, pythonRequirementsFile));
    }
    return launchers.get(projectName);
  }
@Test
  public void testLauncherCreatesDependenciesDir() throws IOException {
    String projectName = UUID.randomUUID().toString();
    Path expectedTempDir = Paths.get(System.getProperty("java.io.tmpdir"), projectName);
    File file = expectedTempDir.toFile();
    file.deleteOnExit();
    TransformServiceLauncher.forProject(projectName, 12345, null);
    Path expectedCredentialsDir = Paths.get(expectedTempDir.toString(), "dependencies_dir");
    Assert.assertTrue(expectedCredentialsDir.toFile().exists());
  }