swagger-codegen 自定义生成器 ClassNotFound
swagger-codegen custom generator ClassNotFound
我正在为 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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
- 然后是上面的代码
我还尝试了 运行ning mvn package
在制作我的自定义生成器(它没有在我能找到的任何地方制作 .jar 文件)之后再次尝试,并尝试自己创建 .jar 文件。遇到同样的错误。
此外,仅供参考,一些明显的文档不一致肯定增加了我的困惑:我的模块的预期位置在 here and the classname
expected here (end of that section). Also, the command for making your own module specifies modules/swagger-codegen-distribution...
when I believe it should specify modules/swagger-codegen-cli...
. And the guidance in the project readme doesn't seem very congruent with the custom module readme that is generated here.
之间不同
我通常不使用 Java,所以如果我只是遗漏了一些非常明显的东西,我深表歉意。在此先感谢您的帮助!
您需要在 java 命令中包含您的自定义库。例如:
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}
在尝试了很多东西/联网之后,这是有效的方法:
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" 附加到您在命令中指定的 class 名称)。您还应该能够在资源子目录中找到小胡子模板。
- 根据需要对
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
ing 是基于我放置东西的位置,只是想清楚我在 运行 命令 时的相对位置
- 如果您只是为您的生成器使用默认生成的基础 class(而不是使用现有语言的子class),您将得到一个异常
FileNotFound
myCustomCodegen/myFile.mustache
-- 它来自 this optional block,您可以从自定义生成器 class 中注释掉它。
- 请记得
mvn package
您进行更改时的自定义模块
请注意,如果您试图在 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
我正在为 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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
- 然后是上面的代码
我还尝试了 运行ning mvn package
在制作我的自定义生成器(它没有在我能找到的任何地方制作 .jar 文件)之后再次尝试,并尝试自己创建 .jar 文件。遇到同样的错误。
此外,仅供参考,一些明显的文档不一致肯定增加了我的困惑:我的模块的预期位置在 here and the classname
expected here (end of that section). Also, the command for making your own module specifies modules/swagger-codegen-distribution...
when I believe it should specify modules/swagger-codegen-cli...
. And the guidance in the project readme doesn't seem very congruent with the custom module readme that is generated here.
我通常不使用 Java,所以如果我只是遗漏了一些非常明显的东西,我深表歉意。在此先感谢您的帮助!
您需要在 java 命令中包含您的自定义库。例如:
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}
在尝试了很多东西/联网之后,这是有效的方法:
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" 附加到您在命令中指定的 class 名称)。您还应该能够在资源子目录中找到小胡子模板。- 根据需要对
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
ing 是基于我放置东西的位置,只是想清楚我在 运行 命令 时的相对位置
- 如果您只是为您的生成器使用默认生成的基础 class(而不是使用现有语言的子class),您将得到一个异常
FileNotFound
myCustomCodegen/myFile.mustache
-- 它来自 this optional block,您可以从自定义生成器 class 中注释掉它。- 请记得
mvn package
您进行更改时的自定义模块
- 请记得
请注意,如果您试图在 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