0

我正在创建一个应用程序来自动为启动器生成资源,这需要自动解析 maven 依赖项,但是在运行 JBoss Shrinkwrap Resolver 时我得到了 UnsupportedOperationException

我在 docker 容器中运行它,以避免本地存储库缓存,它在主机上的容器之外工作,但我不确定容器内缺少什么。

我的解析器配置是一个简单的示例,转换为MavenResolvedArtifact

MavenResolvedArtifact[] artifacts = Maven.configureResolver()
            .withMavenCentralRepo(true)
            .withRemoteRepo("internal-nexus", MAVEN_URL, "default")
            .resolve("com.company:application:" + PROJECT_VERSION)
            .withTransitivity()
            .asResolvedArtifact();

我的Dockerfile也比较简单,使用openjdk9,包括bootstrapper程序,一个shell脚本和一些环境变量。

FROM openjdk:9

COPY bootstrapper-shaded.jar /bootstrapper.jar
COPY docker-run.sh /run.sh

ENV CLONE_URL https://github.com/company/repository.git
ENV NEXUS_BASE https://nexus.company.com/
ENV NEXUS_REPO repository

RUN chmod +x /run.sh
RUN apt-get update && apt-get install -y git software-properties-common maven

ENTRYPOINT ["/run.sh"]

run.sh 脚本复制一些文件(为简洁起见已删除),运行构建,然后是引导程序

#!/bin/sh

rm -rf /boostrap/*
cd /bootstrap/
git clone $CLONE_URL work
cd work
chmod +x ./gradlew
./gradlew clean build
NEXUS_URL=`printf $NEXUS_BASE; printf "/repository/"; printf $NEXUS_REPO` ./gradlew upload
java -jar /bootstrapper.jar 0

我希望输出与主机上的输出相同,一个MavenResolvedArtifacts 数组,但是在代码片段的最后一行抛出以下异常,.asResolvedArtifact()

Exception in thread "main" java.lang.UnsupportedOperationException: No format processor for org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact was found. Supported processors are: class org.jboss.shrinkwrap.resolver.impl.maven.archive.ArchiveFormatProcessor
    at org.jboss.shrinkwrap.resolver.spi.format.FormatProcessors.find(FormatProcessors.java:53)
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenFormatStageImpl.as(MavenFormatStageImpl.java:84)
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenFormatStageImpl.asResolvedArtifact(MavenFormatStageImpl.java:71)
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenFormatStageImpl.asResolvedArtifact(MavenFormatStageImpl.java:40)
    at com.company.ResolveTask.run(ResolveTask.java:39)
    at com.company.Bootstrapper.main(Bootstrapper.java:102)

对堆栈跟踪中的任何拼写错误表示歉意,VM 不允许我复制粘贴,所以我必须自己输入。

更新:还没有在谷歌上找到任何其他东西,尝试过干净的构建无济于事。

4

1 回答 1

0

您需要将工件的类型更改为

org.jboss.shrinkwrap.resolver.impl.maven.archive.ArchiveFormatProcessor

或者至少在您声明时将其转换为那个。

于 2019-08-09T22:48:00.153 回答