class WorkItemDefinitionDeployServices {

    @SuppressWarnings("all")
    public void deploy(final Metadata metadata) {
        final Path root = metadata.getRoot();
        final Path deployedPath = getDeployedRoot(metadata);
        final Path path = null != deployedPath ? deployedPath : root;
        synchronized (path) {
            if (null == getDeployedRoot(metadata)) {
                deployed.put(root.toURI(), root);
                deployServices.forEach(s -> s.deploy(metadata));
            }
        }
    }

    protected  WorkItemDefinitionDeployServices();
    @Inject public  WorkItemDefinitionDeployServices(final @Any Instance<WorkItemDefinitionDeployService> deployServices);
      WorkItemDefinitionDeployServices(final Iterable<WorkItemDefinitionDeployService> deployServices,
                                     final Map<String, Path> deployed);

}