apple/pkl · error · PackageLoadError

cannotResolveDependencyNoProject

cannotResolveDependencyNoProject

Error message

cannotResolveDependencyNoProject

What it means

Sentinel error in EvaluatorImpl.normalizeModuleSource: a dependency notation URI like `@foo/bar.pkl` cannot be resolved because no project context is available (projectFileUri is null). Dependency shorthand imports only work when the evaluator was given a project whose dependencies map notation URIs to resolved absolute package URIs.

Solutions

  1. Set a project on the evaluator (setProject/applyFromProject) so `@` dependency imports can be resolved.
  2. Use the fully resolved absolute URI of the module instead of dependency notation.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkl-core/src/main/java/org/pkl/core/EvaluatorImpl.java:451 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apple/pkl@f3efcbfc9b (2026-09-08). Data as JSON: /api/errors/54832034a8704a45. Report an issue: GitHub.

Appendix: source

Thrown at pkl-core/src/main/java/org/pkl/core/EvaluatorImpl.java:451

    handleTimeout(timeoutTask);
    return evalResult;
  }

  /** Resolve dependency notation URIs (e.g. `@foo/bar.pkl`) to its resolved absolute URI. */
  private ModuleSource normalizeModuleSource(ModuleSource moduleSource) {
    if (moduleSource.getContents() != null
        || moduleSource.getUri().isAbsolute()
        || !moduleSource.getUri().getPath().startsWith("@")) {
      return moduleSource;
    }
    try {
      if (projectFileUri != null) {
        var moduleKey = moduleResolver.resolve(projectFileUri);
        var uri = IoUtils.resolve(securityManager, moduleKey, moduleSource.getUri());
        return ModuleSource.uri(uri);
      } else {
        throw new PackageLoadError("cannotResolveDependencyNoProject");
      }
    } catch (URISyntaxException e) {
      // impossible condition
      throw PklBugException.unreachableCode();
    } catch (IOException e) {
      throw new VmExceptionBuilder()
          .evalError("ioErrorLoadingModule", moduleSource.getUri())
          .build();
    } catch (ExternalReaderProcessException | SecurityManagerException | PackageLoadError e) {
      throw new VmExceptionBuilder().withCause(e).build();
    }
  }

  private <T> T doEvaluate(ModuleSource moduleSource, Function<VmTyped, T> doEvaluate) {
    return doEvaluate(
        () -> {
          var moduleKey = moduleResolver.resolve(normalizeModuleSource(moduleSource));
          var module = VmLanguage.get(null).loadModule(moduleKey);

View on GitHub (pinned to f3efcbfc9b)