【发布时间】:2022-01-04 19:35:56
【问题描述】:
我有一个项目被设置为编译我的资源目录中指定的 protobufs。为此,我使用了xolstice 插件,配置如下:
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
</plugin>
这大致是here 描述的配置。有问题的原型包括一些对象模型以及我注册使用的 GRPC 服务。
.jar 很容易打包,maven-jar-plugin 我继承自我们共同的根 pom。配置如下:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
当我在 IntelliJ 中运行我的项目时,一切似乎都运行良好 - 我可以观察到所需的原型已正确生成并且我没有任何问题。但是,当我用java -jar target/service.jar 运行.jar 时,我遇到了以下问题:
[Byte Buddy] ERROR com.artistchooser2.handlers.ChooseArtistsHandler [jdk.internal.loader.ClassLoaders$AppClassLoader@5c29bfd, unnamed module @776b83cc, Thread[main,5,main], loaded=false]
java.lang.IllegalStateException: Cannot resolve type description for com.artistChooser2.v1.ChooseArtistsServiceGrpc$ChooseArtistsServiceImplBase
at net.bytebuddy.pool.TypePool$Resolution$Illegal.resolve(TypePool.java:161)
at net.bytebuddy.pool.TypePool$Default$WithLazyResolution$LazyTypeDescription.delegate(TypePool.java:1038)
本应由协议编译步骤生成的类似乎无处可寻。然而,有趣的是,我可以通过运行:jar -tvf target/service.jar |grep 'ChooseArtistsServiceGrpc$ChooseArtistsServiceImplBase' 轻松确认这似乎已被破坏。如果我运行它,我可以观察到该类实际上是可用的并且与.jar 正确打包。我还可以通过仔细阅读 .jar 中的所有内容,在 IntelliJ 中轻松验证这一点。
我注意到这个问题是因为我正在设置一个测试,该测试在 Docker 映像中运行我的服务并验证它是否像在生产中一样正确启动。然而,有趣的是,虽然我无法在本地成功运行 mvn verify,但我的构建服务器(我已确认正在运行 mvn verify)运行完成没有问题。
我检查了所有常见的嫌疑人 - 它与构建服务器上使用的 maven 构建配置文件无关,maven 版本在构建服务器和本地是相同的,我已经甚至尝试清除.m2/repository,以防那里有什么可疑的东西。
所以我想我的问题是是否有人有任何进一步的线索?还有什么我应该研究的东西,某种环境变量,或者任何其他可能在本地导致上述异常但不在构建服务器上的东西?
【问题讨论】:
标签: maven jar protocol-buffers grpc