我正在创建一个应用程序以自动为启动器生成资源,这需要自动解决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 的类型更改为
或至少在声明时将其强制转换为该值。