{"record":{"id":"d0a7ec8676d5333a","repo":"gradle/gradle","slug":"no-service-of-type-s-available","errorCode":null,"errorMessage":"No service of type %s available.","messagePattern":"No service of type (.+?) available\\.","errorType":"exception","errorClass":"UnknownServiceException","httpStatus":null,"severity":"error","filePath":"platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/transform/DefaultTransform.java","lineNumber":482,"sourceCode":"            }\n            return null;\n        }\n\n        @Nullable\n        @Override\n        public Object find(Type serviceType) throws ServiceLookupException {\n            Object result = find(serviceType, null);\n            if (result != null) {\n                return result;\n            }\n            return delegate.find(serviceType);\n        }\n\n        @Override\n        public Object get(Type serviceType) throws UnknownServiceException, ServiceLookupException {\n            Object result = find(serviceType);\n            if (result == null) {\n                throw new UnknownServiceException(serviceType, \"No service of type \" + serviceType + \" available.\");\n            }\n            return result;\n        }\n\n        @Override\n        public Object get(Type serviceType, Class<? extends Annotation> annotatedWith) throws UnknownServiceException, ServiceLookupException {\n            Object result = find(serviceType, annotatedWith);\n            if (result != null) {\n                return result;\n            }\n            return delegate.get(serviceType, annotatedWith);\n        }\n\n        private static class InjectionPoint {\n            private final Class<? extends Annotation> annotation;\n            private final Type injectedType;\n            private final Supplier<Object> valueToInject;\n","sourceCodeStart":464,"sourceCodeEnd":500,"githubUrl":"https://github.com/gradle/gradle/blob/534f27719b66953f95cc907aae7f2c1b12f5482d/platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/transform/DefaultTransform.java#L464-L500","documentation":"DefaultTransform wraps a service registry scoped to the transform; its get(Type) throws UnknownServiceException 'No service of type ... available.' when no service of the requested type is registered in the transform's isolated scope or its delegate. Artifact transforms run in isolation and only see services explicitly provided to them, so lookups of application/project services fail.","triggerScenarios":"Code executing inside an ArtifactTransform calling a service locator get() for a type not registered in the transform scope — e.g. project-level singletons, custom application services, or services never passed into the transform registration.","commonSituations":"Porting code that used build services or application services into an artifact transform; custom transforms trying to reach internal APIs; worker isolation surfacing previously hidden coupling.","solutions":["Move the service-dependent work outside the transform and pass its results in through transform parameters.","Use only services documented for transforms (e.g. ObjectFactory via getParameters() patterns) and express configuration through parameters.","If a service genuinely belongs to the transform, register it as part of the transform's registration/parameters rather than looking it up at runtime."],"exampleFix":"// before: transform looks up an application-scoped service\nclass MyTransform extends ArtifactTransform {\n  void transform(File input) {\n    def svc = registry.get(CustomIndexer) // UnknownServiceException in transform scope\n  }\n}\n// after: do the work outside, pass data via parameters\nabstract class MyParams implements TransformParameters {\n  abstract Property<String> getIndexLocation()\n}\n// compute index location before registration, set it in parameters { }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  def svc = registry.get(MyService)\n} catch (org.gradle.internal.service.UnknownServiceException e) {\n  // service not available in transform scope: pass its data via transform parameters instead\n  throw e\n}","preventionTips":["Do not look up application/project services inside artifact transforms.","Pass all transform inputs through parameters.","Run transforms with only the documented transform-scope services."],"tags":["gradle","artifact-transform","service-registry","dependency-injection"],"backgroundTag":"service-not-registered","analyzedSha":"534f27719b66953f95cc907aae7f2c1b12f5482d","analyzedAt":"2026-08-22T08:09:12.375Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}