2016-07-12 3 views
1

Я оставил открытым вопрос для hereОшибка: Не удалось найти или загрузить основной класс Swagger Codegen


я пытаюсь создать пользовательский CodeGen, мне удалось заставить его работать, помещая файлы внутри проект Codegen, но я хочу, чтобы работать, как это: https://github.com/swagger-api/swagger-codegen#making-your-own-codegen-modules

Я не изменил проект автоматически сформированное на всех, но я получаю:

Error: Could not find or load main class io.swagger.codegen.SwaggerCodegen 

Это командная строка:

java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar:swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation 

Я получил баночку отсюда https://mvnrepository.com/artifact/io.swagger/swagger-codegen-project/2.1.6 Это то, что я делаю:

  1. java -jar swagger-codegen-cli-2.1.6.jar meta \ -o output/myLibrary -n myClientCodegen -p com.my.company.codegen Выполнить, чтобы создать CoSTUME Codegen

  2. Выполнить mvn package in output/myLibrary

  3. Запустить java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar:swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation в папке который содержит как чванство-codege-CLI-2.1.6.jar и выходную папку

Это действительно найти класс, если удалить первую часть, но это не распространяется найти новый язык:

java -cp swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation 

Я рассмотрел ответы на вопрос «Ошибка: не удалось найти или загрузить основные классы», но не удалось его исправить.

Here is a link to the jar

ответ

1

Проблема заключается в том, что вы не указали, что правильный путь swagger-codegen-2.1.6.jar в вызове. Вот почему он не может найти класс main.

Если вы находитесь внутри корневого проекта swagger-codegen вы должны указать это так: modules/swagger-codegen-cli/target/swagger-codegen-cli.jar

~$ cd ~/git/swagger-codegen # go into your root project 
~/git/swagger-codegen$ # ... do the steps you described 
~/git/swagger-codegen$ java -cp \ 
output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \ 
io.swagger.codegen.SwaggerCodegen \ 
generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json \ 
-l com.my.company.codegen.Mycustomcodegengenerator \ 
-o outputlocation 

Или как однострочника:

~/git/swagger-codegen$ java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation 

Update 1

I 'm довольно уверен, когда вы строите classpath с -cp, вы ошиблись с swagger-codegen-cli-2.1.6.jar. Пожалуйста, проверьте следующее.

Скопируйте оба (myClientCodegen-swagger-codegen-1.0.0.jar и swagger-codegen-cli-2.1.6.jar) банки в одну папку. Затем перейдите в эту папку и попробуйте следующее:

javap -cp myCustomCodegen-swagger-codegen-1.0.0.jar:swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen 

Java р проверяет, является ли основной класс io.swagger.codegen.SwaggerCodegen доступен.На моей машине печатает это:

Compiled from "SwaggerCodegen.java" 
public class io.swagger.codegen.SwaggerCodegen { 
    public io.swagger.codegen.SwaggerCodegen(); 
    public static void main(java.lang.String[]); 
} 
+0

Я не в корневом проекте swagger-codegen, так как я сказал это: 'java -cp swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https: // watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation' работает просто отлично, а это значит, что он может найти класс, пока я не включайте путь для 'myClientCodegen-swagger-codegen-1.0.0.jar' – moondaisy

+0

, что означает, что в вашем текущем каталоге есть' swagger-codegen-cli-2.1.6.jar'. Вы уверены, что? Исключение u, которое вы указали, появляется, если java не имеет доступа к 'swagger-codegen-cli-2.1.6.jar'. Я почти уверен, что это связано с этим. Злость заключается в том, что java не регистрирует ошибку, если она не может найти упомянутую банку. – d0x

+0

Да, я уверен. Если бы я хотел, я мог бы использовать любой из языков, которые уже были определены с помощью swagger, называющего это. Проблема возникает только при добавлении пути к моей банке. – moondaisy

1

Изменения двоеточия на точку с запятой - между баночками в пути к классам. Таким образом, вместо

java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar:swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation 

Это должно быть

java -cp output/myLibrary/target/myCustomCodegen-swagger-codegen-1.0.0.jar;swagger-codegen-cli-2.1.6.jar io.swagger.codegen.SwaggerCodegen generate -i https://watson-api-explorer.mybluemix.net/listings/conversation-v1-experimental.json -l com.my.company.codegen.Mycustomcodegengenerator -o outputlocation 

пути Несколько классов должны быть разделены точкой с запятой. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

+0

Я уже пробовал это, но я продолжаю получать ту же ошибку. – moondaisy

Смежные вопросы