我正在创建一个应用程序以自动为启动器生成资源,这需要自动解决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,包括 bootstrap ,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脚本复制一些文件(为简洁起见已删除),运行构建,然后启动 bootstrap

#!/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

我期望输出与主机上的输出相同,即MavenResolvedArtifact的数组,但是在代码片段的最后一行.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不允许我将其复制粘贴出来,因此我必须自己输入。

更新:尚未在Google上找到其他任何东西,尝试进行干净的构建无济于事。

最佳答案

您需要将 Artifact 的类型更改为



或至少在声明时将其强制转换为该值。

08-03 14:33