@Nullable
  public static java.nio.file.Path getArtifactPath(@NotNull java.nio.file.Path localRepository,
                                                   @NotNull MavenId id,
                                                   @NotNull String extension,
                                                   @Nullable String classifier) {
    if (id.getGroupId() == null || id.getArtifactId() == null || id.getVersion() == null) {
      return null;
    }
    String[] artifactPath = id.getGroupId().split("\\.");
    try {
      for (String path : artifactPath) {
        localRepository = localRepository.resolve(path);
      }
      return localRepository
        .resolve(id.getArtifactId())
        .resolve(id.getVersion())
        .resolve(id.getArtifactId() + "-" + id.getVersion() + (classifier == null ? "." + extension : "-" + classifier + "." + extension));
    }
    catch (InvalidPathException e) {
      return null;
    }
  }
@Nullable
  public static java.nio.file.Path getArtifactPath(@NotNull java.nio.file.Path localRepository,
                                                   @NotNull MavenId id,
                                                   @NotNull String extension,
                                                   @Nullable String classifier)