diff --git a/cli/pom.xml b/cli/pom.xml
deleted file mode 100644
index 216737b3..00000000
--- a/cli/pom.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
- 4.0.0
-
-
- eu.maveniverse.maven.mima
- mima
- 2.4.22-SNAPSHOT
-
-
- cli
- ${project.groupId}:${project.artifactId}
-
-
- 11
- eu.maveniverse.maven.mima.cli.Main
- eu.maveniverse.maven.mima.cli
-
-
-
-
-
- eu.maveniverse.maven.mima
- context
-
-
- org.slf4j
- slf4j-api
-
-
- info.picocli
- picocli
-
-
- info.picocli
- picocli-shell-jline3
-
-
- org.fusesource.jansi
- jansi
-
-
- org.apache.maven.indexer
- search-api
-
-
- org.apache.maven.indexer
- search-backend-remoterepository
-
-
- org.apache.maven.indexer
- search-backend-smo
-
-
-
-
- org.apache.maven
- maven-settings
- ${version.maven}
- provided
-
-
- org.apache.maven.resolver
- maven-resolver-api
- provided
-
-
- org.apache.maven.resolver
- maven-resolver-util
- provided
-
-
-
-
- org.slf4j
- slf4j-simple
- runtime
-
-
- org.slf4j
- jcl-over-slf4j
- runtime
-
-
-
- eu.maveniverse.maven.mima.runtime
- standalone-static-uber
- runtime
-
-
- *
- *
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- default-proc
-
- compile
-
- generate-sources
-
-
-
- info.picocli
- picocli-codegen
- ${version.picocli}
-
-
-
- -Aproject=${project.groupId}/${project.artifactId}
-
- only
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- ${mainClass}
-
-
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
- cli
-
- shade
-
- package
-
- false
- true
- uber
-
-
-
-
-
- ${mainClass}
- ${project.artifactId}
- ${project.version}
- ${project.artifactId}
- ${project.version}
- ${project.groupId}
-
-
-
-
-
- *:*
-
- META-INF/MANIFEST.MF
- META-INF/LICENSE
- META-INF/DEPENDENCIES
- META-INF/NOTICE
- **/module-info.class
-
-
-
-
- eu.maveniverse.maven.mima.cli.Main
-
- true
-
-
-
-
-
-
-
diff --git a/cli/src/main/java/eu/maveniverse/maven/mima/cli/ArtifactRecorder.java b/cli/src/main/java/eu/maveniverse/maven/mima/cli/ArtifactRecorder.java
deleted file mode 100644
index aae6d43d..00000000
--- a/cli/src/main/java/eu/maveniverse/maven/mima/cli/ArtifactRecorder.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2023-2024 Maveniverse Org.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v20.html
- */
-package eu.maveniverse.maven.mima.cli;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import org.eclipse.aether.AbstractRepositoryListener;
-import org.eclipse.aether.RepositoryEvent;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * Records in-memory all the resolved artifacts.
- */
-final class ArtifactRecorder extends AbstractRepositoryListener {
- private final RemoteRepository sentinel = new RemoteRepository.Builder("none", "default", "fake").build();
- private final ConcurrentHashMap> artifactsMap = new ConcurrentHashMap<>();
-
- @Override
- public void artifactResolved(RepositoryEvent event) {
- if (event.getException() == null) {
- RemoteRepository repository = event.getRepository() instanceof RemoteRepository
- ? (RemoteRepository) event.getRepository()
- : sentinel;
- artifactsMap.computeIfAbsent(repository, k -> new ArrayList<>()).add(event.getArtifact());
- }
- }
-
- public RemoteRepository getSentinel() {
- return sentinel;
- }
-
- public Map> getArtifactsMap() {
- return artifactsMap;
- }
-
- public List getAllArtifacts() {
- return artifactsMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
- }
-
- public Set getUniqueArtifacts() {
- return new HashSet<>(getAllArtifacts());
- }
-}
diff --git a/cli/src/main/java/eu/maveniverse/maven/mima/cli/Classpath.java b/cli/src/main/java/eu/maveniverse/maven/mima/cli/Classpath.java
deleted file mode 100644
index cc1d4ac5..00000000
--- a/cli/src/main/java/eu/maveniverse/maven/mima/cli/Classpath.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2023-2024 Maveniverse Org.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v20.html
- */
-package eu.maveniverse.maven.mima.cli;
-
-import eu.maveniverse.maven.mima.context.Context;
-import java.io.File;
-import java.util.stream.Collectors;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.resolution.DependencyRequest;
-import org.eclipse.aether.resolution.DependencyResult;
-import org.eclipse.aether.util.artifact.JavaScopes;
-import org.eclipse.aether.util.filter.DependencyFilterUtils;
-import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
-import picocli.CommandLine;
-
-/**
- * Resolves transitively a given GAV and outputs classpath path.
- */
-@CommandLine.Command(name = "classpath", description = "Resolves Maven Artifact and prints out the classpath")
-public final class Classpath extends ResolverCommandSupport {
-
- enum ClasspathScope {
- runtime,
- compile,
- test;
- }
-
- @CommandLine.Parameters(index = "0", description = "The GAV to print classpath for")
- private String gav;
-
- @CommandLine.Option(names = "--scope", defaultValue = "runtime")
- private ClasspathScope scope;
-
- @CommandLine.Option(
- names = {"--boms"},
- defaultValue = "",
- split = ",",
- description = "Comma separated list of BOMs to apply")
- private String[] boms;
-
- @Override
- protected Integer doCall(Context context) throws Exception {
- java.util.List managedDependencies = importBoms(context, boms);
- Artifact artifact = parseGav(gav, managedDependencies);
-
- CollectRequest collectRequest = new CollectRequest();
- collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
- collectRequest.setRepositories(context.remoteRepositories());
- collectRequest.setManagedDependencies(managedDependencies);
- DependencyRequest dependencyRequest =
- new DependencyRequest(collectRequest, DependencyFilterUtils.classpathFilter(scope.name()));
-
- verbose("Resolving {}", dependencyRequest);
- DependencyResult dependencyResult =
- context.repositorySystem().resolveDependencies(getRepositorySystemSession(), dependencyRequest);
-
- PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
- dependencyResult.getRoot().accept(nlg);
- // TODO: Do not use PreorderNodeListGenerator#getClassPath() until MRESOLVER-483 is fixed/released
- info("{}", nlg.getFiles().stream().map(File::getAbsolutePath).collect(Collectors.joining(File.pathSeparator)));
- return 0;
- }
-}
diff --git a/cli/src/main/java/eu/maveniverse/maven/mima/cli/CommandSupport.java b/cli/src/main/java/eu/maveniverse/maven/mima/cli/CommandSupport.java
deleted file mode 100644
index d02c1785..00000000
--- a/cli/src/main/java/eu/maveniverse/maven/mima/cli/CommandSupport.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 2023-2024 Maveniverse Org.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v20.html
- */
-package eu.maveniverse.maven.mima.cli;
-
-import eu.maveniverse.maven.mima.context.Context;
-import eu.maveniverse.maven.mima.context.ContextOverrides;
-import eu.maveniverse.maven.mima.context.HTTPProxy;
-import eu.maveniverse.maven.mima.context.MavenSystemHome;
-import eu.maveniverse.maven.mima.context.MavenUserHome;
-import eu.maveniverse.maven.mima.context.Runtime;
-import eu.maveniverse.maven.mima.context.Runtimes;
-import java.io.PrintStream;
-import java.nio.file.Path;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Supplier;
-import org.apache.maven.settings.Proxy;
-import org.apache.maven.settings.Settings;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.util.version.GenericVersionScheme;
-import org.eclipse.aether.version.VersionScheme;
-import org.slf4j.helpers.MessageFormatter;
-import picocli.CommandLine;
-
-/**
- * Support class.
- */
-public abstract class CommandSupport implements Callable {
- @CommandLine.Option(
- names = {"-v", "--verbose"},
- description = "Be verbose about things happening")
- protected boolean verbose;
-
- @CommandLine.Option(
- names = {"-o", "--offline"},
- description = "Work offline")
- protected boolean offline;
-
- @CommandLine.Option(
- names = {"-s", "--settings"},
- description = "The Maven User Settings file to use")
- protected Path userSettingsXml;
-
- @CommandLine.Option(
- names = {"-gs", "--global-settings"},
- description = "The Maven Global Settings file to use")
- protected Path globalSettingsXml;
-
- @CommandLine.Option(
- names = {"-P", "--activate-profiles"},
- split = ",",
- description = "Comma delimited list of profile IDs to activate (may use '+', '-' and '!' prefix)")
- protected java.util.List profiles;
-
- @CommandLine.Option(
- names = {"-D", "--define"},
- description = "Define a user property")
- protected List userProperties;
-
- @CommandLine.Option(
- names = {"--proxy"},
- description = "Define a HTTP proxy (host:port)")
- protected String proxy;
-
- private static final ConcurrentHashMap> EXECUTION_CONTEXT = new ConcurrentHashMap<>();
-
- protected Object getOrCreate(String key, Supplier> supplier) {
- ArrayDeque