apple/pkl · error · PklException

noPackageDefinedByProject

noPackageDefinedByProject

Error message

ErrorMessages.create("noPackageDefinedByProject", project.getProjectFileUri())

What it means

doPackage() packages the package declared by a project, but this project does not declare one (project.getPackage() returns null because no [package] section exists in PklProject). The error names the project file URI in 'noPackageDefinedByProject'.

Solutions

  1. Add a [package] section (with name, baseUri, version) to the project's PklProject file
  2. Verify you are operating on the correct project directory that defines a package
  3. Use a different command/flow if the project is not meant to be packaged

Example fix

// PklProject — before
// (no package section)
// after
[package]
name = "my-pkg"
baseUri = "package://example.com/my-pkg"
version = "1.0.0"
Defensive patterns

Strategy: validation

Validate before calling

if (project.getPackage() == null) throw new IllegalStateException("project defines no [package] section: " + project.getProjectFileUri());

Type guard

boolean isPackagable(Project p) { return p.getPackage() != null; }

Try / catch

try { packager.doPackage(project); } catch (PklException e) { if (e.getMessage().startsWith("no package")) { /* add [package] section or stop packaging */ } }

Prevention

When it happens

Trigger: Calling ProjectPackager.doPackage(project) on a Project whose PklProject file lacks a package definition.

Common situations: Running 'pkl project package' inside a plain project directory that has no [package] block; wrong working directory; expecting packaging to work on library-less projects.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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

Appendix: source

Thrown at pkl-core/src/main/java/org/pkl/core/project/ProjectPackager.java:173

      if (packageResult.cacheZipFile() != null) {
        writeLine(packageResult.cacheZipFile().normalize().toString());
      }
      outputWriter.flush();
    }
  }

  private Path resolveOutputDirectory(Package pkg) {
    var substituted =
        outputPathPattern
            .replace("%{name}", pkg.name())
            .replace("%{version}", pkg.version().toString());
    return workingDir.resolve(substituted);
  }

  public PackageResult doPackage(Project project) throws IOException {
    var pkg = project.getPackage();
    if (pkg == null) {
      throw new PklException(
          ErrorMessages.create("noPackageDefinedByProject", project.getProjectFileUri()));
    }
    if (packageResults.containsKey(pkg.uri())) {
      return packageResults.get(pkg.uri());
    }
    var files = collectPackageElements(project, pkg);
    validatePklImportsAndReads(project, files);
    var outputDir = resolveOutputDirectory(pkg);
    var metadataFileName = IoUtils.takeLastSegment(pkg.uri().getUri().getPath(), '/');
    var metadataFile = outputDir.resolve(metadataFileName);
    var metadataChecksumFile = outputDir.resolve(metadataFileName + ".sha256");
    var zipFile = outputDir.resolve(metadataFileName + ".zip");
    var zipChecksumFile = outputDir.resolve(metadataFileName + ".zip.sha256");
    var zipFileChecksum = createPackageZipAndComputeChecksum(project, files, zipFile);
    var metadataFileChecksum =
        createDependencyMetadataAndComputeChecksum(project, pkg, metadataFile, zipFileChecksum);
    Files.writeString(zipChecksumFile, zipFileChecksum);
    Files.writeString(metadataChecksumFile, metadataFileChecksum);

View on GitHub (pinned to f3efcbfc9b)