swagger-codegen自定义生成器ClassNotFound

时间:2015-10-29 00:09:47

标签: swagger

我正在为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

我没有遇到任何内置发电机的问题。

我做了什么(见自述):

  1. 克隆项目
  2. mvn package
  3. java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta -o output/myLibrary -n myGenerator -p com.my.company.codegen
  4. 然后是上面的代码
  5. 我也尝试在制作自定义生成器后再次运行mvn package(我没有在任何地方找到.jar文件),并尝试自己创建.jar文件。得到了同样的错误。

    另外,仅供参考,我的混淆肯定会因一些明显的文档不一致而增加:我的模块的预期位置在hereclassname预期here(该部分的结尾)之间有所不同。此外,making your own module的命令在我认为应指定modules/swagger-codegen-distribution...时指定modules/swagger-codegen-cli...。项目自述文件中的指南与生成的here自定义模块自述文件似乎不一致。

    我通常不会使用Java,所以如果我错过了一些非常明显的东西,那就道歉了。在此先感谢您的帮助!

3 个答案:

答案 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

以下是我必须开始完成创建自定义生成器的步骤:

    来自的
  1. git clone
  2. cd swagger-codegen
  3. mvn package
  4. 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子目录中找到小胡子模板。
  5. myCustomCodegenGenerator.java和模板进行任何更改。
  6. cd output/myLibrary
  7. mvn package
  8. cd ../..
  9. 现在生成您的自定义库: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
  10. 注意:

    • 显然cd是基于我放东西的地方,只是想在运行命令时相对于我的位置清楚
    • 如果您只是为生成器使用默认生成的基类(而不是对现有语言进行子类化),则FileNotFound将获得myCustomCodegen/myFile.mustache的异常 - 它来自{ {3}}您可以从自定义生成器类中注释掉它。
      • 在进行更改时,请记住mvn package您的自定义模块

答案 2 :(得分:0)

请注意,如果您尝试在Windows中创建生成器并从PowerShell运行它,我必须按如下方式修改@ baylee的步骤:

  1. mvn install
    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.Codegen -i path/to/swagger.json -l my-language -o outputlocation