{"record":{"id":"7ac310536fc3c6a1","repo":"GoogleContainerTools/jib","slug":"field1-field2-and-fieldn-are-required","errorCode":null,"errorMessage":"<field1>, <field2>, ... and <fieldN> are required but not set","messagePattern":"<field1>, <field2>, \\.\\.\\. and <fieldN> are required but not set","errorType":"validation","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"jib-core/src/main/java/com/google/cloud/tools/jib/configuration/BuildContext.java","lineNumber":361,"sourceCode":"              executorService == null, // shutDownExecutorService\n              alwaysCacheBaseImage,\n              registryMirrors,\n              enablePlatformTags);\n\n        case 1:\n          throw new IllegalStateException(missingFields.get(0) + \" is required but not set\");\n\n        case 2:\n          throw new IllegalStateException(\n              missingFields.get(0) + \" and \" + missingFields.get(1) + \" are required but not set\");\n\n        default:\n          missingFields.add(\"and \" + missingFields.remove(missingFields.size() - 1));\n          StringJoiner errorMessage = new StringJoiner(\", \", \"\", \" are required but not set\");\n          for (String missingField : missingFields) {\n            errorMessage.add(missingField);\n          }\n          throw new IllegalStateException(errorMessage.toString());\n      }\n    }\n\n    @Nullable\n    @VisibleForTesting\n    Path getBaseImageLayersCacheDirectory() {\n      return baseImageLayersCacheDirectory;\n    }\n\n    @Nullable\n    @VisibleForTesting\n    Path getApplicationLayersCacheDirectory() {\n      return applicationLayersCacheDirectory;\n    }\n  }\n\n  /**\n   * Creates a new {@link Builder} to build a {@link BuildContext}.","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/GoogleContainerTools/jib/blob/fb949e2676afbbd7dd7a1ef61e20251931325654/jib-core/src/main/java/com/google/cloud/tools/jib/configuration/BuildContext.java#L343-L379","documentation":"Same BuildContext.Builder.build() validation as the 1-2 field case, but for three or more missing required fields. The code joins the field names with commas and 'and' before the last one, then throws IllegalStateException with '<field1>, <field2>, ... and <fieldN> are required but not set'.","triggerScenarios":"Calling build() on a nearly-empty BuildContext.Builder — e.g. a freshly created builder with few or no setters called, so 3+ required fields (base image, target image, container config, etc.) are unset.","commonSituations":"Initial scaffolding of jib-core based builds where the builder is only partially wired up, or conditional code paths that skip most setters when config sections are absent.","solutions":["Call every required setter listed in the message on the builder before build()","Compare against a known-good BuildContext construction (or the Maven/Gradle plugin setup) to see which fields you skipped","Fail fast in your own code: check config completeness before creating the builder"],"exampleFix":"// before\nBuildContext ctx = BuildContext.builder().build(); // throws with many fields\n// after\nBuildContext ctx = BuildContext.builder()\n    .setBaseImage(...)\n    .setTargetImage(...)\n    .setContainerConfiguration(...)\n    .setLayerConfigurations(...)\n    .build();","handlingStrategy":"validation","validationCode":"// Validate your source config object before building the context\nObjects.requireNonNull(cfg.getBaseImage(), \"baseImage required\");\nObjects.requireNonNull(cfg.getTargetImage(), \"targetImage required\");\nObjects.requireNonNull(cfg.getLayers(), \"layers required\");\nBuildContext ctx = BuildContext.builder()\n    .setBaseImage(cfg.getBaseImage())\n    .setTargetImage(cfg.getTargetImage())\n    .setLayerConfigurations(cfg.getLayers())\n    .build();","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Start from a working jib-core example and add fields incrementally","Add a smoke test that builds a minimal valid BuildContext","Fail at config-load time, not at build() time"],"tags":["jib","configuration","builder","illegal-state"],"backgroundTag":"missing-required-config-field","analyzedSha":"fb949e2676afbbd7dd7a1ef61e20251931325654","analyzedAt":"2026-09-06T14:04:09.491Z","contentChangedAt":"2026-09-06T14:04:09.491Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}