Как мне написать простой java main(), который:
- Принимает имя области действия maven и путь к файлу pom.xml в качестве аргументов.
- Создает список строк, содержащих путь к классам соответствующего проекта maven и области видимости.
- Зависит только от библиотек, которые в настоящее время поддерживаются?
Мотивация:
Я пытаюсь обновить зависимости плагина Fitnesse-maven-classpath, найденного по адресу https://github.com/amolenaar/fitnesse-maven-classpath , который имеет проблемы с удобством использования из-за его зависимости от maven-embedder-3.0.4, см., например, Fitnesse maven-classpath-plugin конфликтует с банкой Guava и Maven/Plexus ComponentLookupException - кошмар пути к классам? .
Простое обновление зависимости в pom-файле плагина до maven-embedder-3.1.1 и замена import com.sonatype.aether
на import com.eclipse.aether
в исходном коде java делает проект компилируемым, но тесты завершаются неудачей с длинным списком ошибок, который начинается следующим образом:
Unable to parse POM file: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Guice provision errors: 1) No implementation for java.util.Set<org.eclipse.aether.RepositoryListener> was bound. while locating java.util.Set<org.eclipse.aether.RepositoryListener> for parameter 0 at org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher.<init>(Unknown Source) while locating org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.eclipse.aether.impl.RepositoryEventDispatcher for parameter 0 at org.eclipse.aether.internal.impl.DefaultMetadataResolver.<init>(Unknown Source) while locating org.eclipse.aether.internal.impl.DefaultMetadataResolver at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.eclipse.aether.impl.MetadataResolver for parameter 0 at org.apache.maven.repository.internal.DefaultVersionResolver.<init>(Unknown Source) while locating org.apache.maven.repository.internal.DefaultVersionResolver at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.eclipse.aether.impl.VersionResolver for parameter 0 at org.eclipse.aether.internal.impl.DefaultRepositorySystem.<init>(Unknown Source) while locating org.eclipse.aether.internal.impl.DefaultRepositorySystem at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.eclipse.aether.RepositorySystem while locating org.apache.maven.artifact.resolver.DefaultArtifactResolver at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.apache.maven.artifact.resolver.ArtifactResolver while locating org.apache.maven.repository.legacy.LegacyRepositorySystem at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.apache.maven.repository.RepositorySystem while locating org.apache.maven.execution.DefaultMavenExecutionRequestPopulator at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.apache.maven.execution.MavenExecutionRequestPopulator 2) No implementation for java.util.Set<org.eclipse.aether.RepositoryListener> was bound. while locating java.util.Set<org.eclipse.aether.RepositoryListener> for parameter 0 at org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher.<init>(Unknown Source) while locating org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher ... etc ... at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] at ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]] while locating org.apache.maven.execution.MavenExecutionRequestPopulator 37 errors at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:974) at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82) at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:260) ... 37 more
В частности, плагин по сути состоит из двух частей: во-первых, получение пути к классам из файла pom, а во-вторых, передача этого пути к классам в Fitnesse. Первая часть, создание пути к классам, завершается с ошибкой с указанным выше сообщением об ошибке при обновлении до maven-embedder-3.1.1 и с менее подробным сообщением при обновлении до 3.5.4.
Существует ли простая альтернатива существующей реализации пути к классам, которая зависит только от современных библиотек, скажем, на https://github.com/apache/maven-dependency-plugin/tree/maven-dependency-plugin-3.1.1 ?
Я специально прошу код метода main(), чтобы убедиться, что я могу преобразовать его в код плагина, а не предполагать, что мой код вызывается, скажем, из запущенного процесса mvn, который уже вычислил путь к классам.