使用Swagger Codegen 3.X.X生成OpenAPI3.0 SDK遇SLF4J异常求助
解决Swagger Codegen 3.x版本SLF4J日志绑定错误
问题背景
环境配置:
- Windows 11
- JDK 11.0.4
- Swagger Codegen 3.0.43
- Apache Maven 3.8.8
执行OpenAPI3.0 SDK生成命令时出现以下错误:
PS D:\OpenAPI\v3.0.43_codegen\swagger-codegen-3.0.43\swagger-codegen-3.0.43> java -jar modules\swagger-codegen-cli\target\swagger-codegen-cli.jar generate -i D:\petstore.json -l php -o c:\temp\petstore_local_api_client SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
已尝试将slf4j-simple-2.0.7.jar和slf4j-api-2.0.7.jar加入环境变量classpath、放在当前目录或cli jar目录,但均无效。仅3.x版本出现该问题,2.x或master分支正常,需适配OpenAPI3.0。
解决方案
方案1:通过-cp参数指定完整类路径运行
使用java -cp替代java -jar,将swagger-codegen-cli.jar和两个SLF4J jar包都加入类路径,直接调用主类执行生成命令:
java -cp "modules\swagger-codegen-cli\target\swagger-codegen-cli.jar;C:\实际路径\slf4j-simple-2.0.7.jar;C:\实际路径\slf4j-api-2.0.7.jar" io.swagger.codegen.SwaggerCodegen generate -i D:\petstore.json -l php -o c:\temp\petstore_local_api_client
注意:把C:\实际路径\替换成你存放SLF4J jar包的真实路径,Windows下用分号分隔多个jar路径。
方案2:重新构建包含SLF4J依赖的Swagger Codegen CLI
进入Swagger Codegen 3.0.43的根目录,执行Maven命令重新构建,让生成的cli jar包内置SLF4J绑定:
mvn clean package -DskipTests -Dslf4j.version=2.0.7
构建完成后,直接用原来的java -jar命令运行即可,不会再出现SLF4J错误。
原因说明
使用java -jar命令时,JVM只会加载指定jar包内的类,会忽略系统环境变量中的CLASSPATH以及目录下的其他jar包,所以之前的尝试无法生效。必须通过-cp参数显式指定所有依赖,或者重新构建包含依赖的jar包。
内容的提问来源于stack exchange,提问作者IMK
相关产品推荐
相关产品推荐

