我正在为swagger-codegen编写自定义生成器。当我尝试使用
运行生成器时java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i path/to/swagger.json -l com.my.company.codegen.MyGenerator -o outputlocation
它以
失败Can't load config class with name com.my.company.codegen.MyGenerator
... list of built-in generators...
at io.swagger.codegen.CodegenConfigLoader.forName(CodegenConfigLoader.java:31)
at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:286)
at io.swagger.codegen.cmd.Generate.run(Generate.java:186)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Caused by: java.lang.ClassNotFoundException: com.my.company.codegen.MyGenerator
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at io.swagger.codegen.CodegenConfigLoader.forName(CodegenConfigLoader.java:29)
... 3 more
我没有遇到任何内置发电机的问题。
我做了什么(见自述):
mvn package
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta -o output/myLibrary -n myGenerator -p com.my.company.codegen
我也尝试在制作自定义生成器后再次运行mvn package
(我没有在任何地方找到.jar文件),并尝试自己创建.jar文件。得到了同样的错误。
另外,仅供参考,我的混淆肯定会因一些明显的文档不一致而增加:我的模块的预期位置在here和classname
预期here(该部分的结尾)之间有所不同。此外,making your own module的命令在我认为应指定modules/swagger-codegen-distribution...
时指定modules/swagger-codegen-cli...
。项目自述文件中的指南与生成的here自定义模块自述文件似乎不一致。
我通常不会使用Java,所以如果我错过了一些非常明显的东西,那就道歉了。在此先感谢您的帮助!
答案 0 :(得分:1)
You'll need to include your custom library in the java command. For example:
java -cp path/to/your/jar.com:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \
-jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \
{args}
答案 1 :(得分:1)
在尝试了很多东西/互联网之后,这是有用的:
java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen generate -i path/to/swagger.json -l com.my.company.codegen.MyCustomCodegenGenerator -o outputlocation
以下是我必须开始完成创建自定义生成器的步骤:
git clone
cd swagger-codegen
mvn package
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta -o output/myLibrary -n myCustomCodegen -p com.my.company.codegen
。这将创建output/myLibrary
和子目录,您应该在其中找到myCustomCodegenGenerator.java
(" Generator"附加到您在命令中指定的类名)。您还应该能够在resources子目录中找到小胡子模板。myCustomCodegenGenerator.java
和模板进行任何更改。cd output/myLibrary
mvn package
cd ../..
java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen generate -i path/to/swagger.json -l com.my.company.codegen.MyCustomCodegenGenerator -o outputlocation
(步骤7中的构建应为您生成target/myCustomCodegen-swagger-codegen-1.0.0.jar
)注意:
cd
是基于我放东西的地方,只是想在运行命令时相对于我的位置清楚FileNotFound
将获得myCustomCodegen/myFile.mustache
的异常 - 它来自{ {3}}您可以从自定义生成器类中注释掉它。
mvn package
您的自定义模块答案 2 :(得分:0)
请注意,如果您尝试在Windows中创建生成器并从PowerShell运行它,我必须按如下方式修改@ baylee的步骤:
mvn install
和
java -cp 'output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar;modules/swagger-codegen-cli/target/swagger-codegen-cli.jar' io.swagger.codegen.Codegen -i path/to/swagger.json -l my-language -o outputlocation