2016-09-21 12 views
8

Tôi muốn sử dụng tính năng mã hóa để tạo ra các máy khách REST và các tài liệu HTML tĩnh.Làm thế nào để tạo swagger.json bằng cách sử dụng gradle?

Tuy nhiên, swagger-codegen cần swagger.json để nhập.

Tôi biết, rằng tôi có thể nhận được điều này từ một máy chủ REST đang chạy được trang bị Swagger. Tuy nhiên, có cách nào để lấy swagger.json trực tiếp từ mã Java của tôi - tức là để tạo nó bằng gradle từ mã nguồn - mà không cần chạy ứng dụng trong một thùng chứa web và trỏ curl hoặc trình duyệt tới nó?

+0

Tôi vẫn đang xem xét. – tbsalling

+0

https://github.com/gigaSproule/swagger-gradle-plugin Bạn đã thử plugin này chưa? Nó tuyên bố làm chính xác những gì bạn đang yêu cầu. –

+0

Khi sử dụng trình cắm thêm-gradle-plugin, tôi đang gặp lỗi sau: com.fasterxml.jackson.databind.JsonMappingException: Không có nội dung để ánh xạ do kết thúc đầu vào tại [Nguồn: UNKNOWN; dòng: 1, cột: 0] – lex

Trả lời

1

Ý tưởng chính là thêm vênh vang-maven-plugin và các lớp học java của bạn vào classpath cho buildscript để có thể sử dụng chúng trong các gradle, một cái gì đó như thế này:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath files(project(':swagger-maven-example').configurations['runtime'].files) 
     classpath files(project(':swagger-maven-example').sourceSets['main'].output.classesDir) 
    } 
} 

đó dòng đầu tiên trong phụ thuộc được swagger libs từ tiểu dự án và dòng thứ hai được các lớp học của bạn mà nên chứa chú thích swagger.

Sau này, bạn có thể gọi Plugin maven trong gradle như là một lớp java đơn giản:

// a trick to have all needed classes in the classpath 
def customClass = new GroovyClassLoader() 

buildscript.configurations.classpath.each { 
    // println it.toURI().toURL() 
    customClass.addURL(it.toURI().toURL()) 
} 

final ApiDocumentMojo mavenTask = Class.forName('com.github.kongchen.swagger.docgen.mavenplugin.ApiDocumentMojo',true, customClass).newInstance(
     apiSources: [ 
       new ApiSource(
         springmvc: false, 
         locations: ['com/github/kongchen/swagger/sample/wordnik/resource'], 
         schemes: ['http', 'https'], 
         host: 'petstore.swagger.wordnik.com', 
         basePath: '/api', 
         info: new Info(
           title: 'Swagger Maven Plugin Sample', 
           version: 'v1', 
           description: 'This is a sample for swagger-maven-plugin', 
           termsOfService: 'http://www.github.com/kongchen/swagger-maven-plugin', 
           contact: new Contact(
             email: '[email protected]', 
             name: 'Kong Chen', 
             url: 'http://kongch.com' 
           ), 
           license: new License(
             url: 'http://www.apache.org/licenses/LICENSE-2.0.html', 
             name: 'Apache 2.0' 
           ) 
         ), 
         outputPath: file("${buildDir}/swagger/document.html").path, 
         swaggerDirectory: file("${buildDir}/swagger/swagger-ui").path, 
         templatePath: file("${project(':swagger-maven-example').projectDir}/templates/strapdown.html.hbs") 
       ) 
     ] 
) 

// maven plugin 
mavenTask.execute() 

Here bạn có thể tìm thấy ví dụ này.

2

Đây là một chút cũ nhưng tôi đã tự hỏi giống hệt nhau ... Nói tóm lại tôi đã bắt đầu nghiên cứu với:

  • Một ứng dụng mẫu Xuân Boot lộ REST API Minimalistic;
  • Chú thích chuyển đổi trên phương thức API;
  • Springfox;
  • Gradle như một công cụ xây dựng;

tôi quản lý để tạo spec JSON như một xây dựng tạo tác sử dụng hai cách tiếp cận khác nhau:

  1. Bằng cách sử dụng một gradle port của swagger-maven-plugin of kongchen.
  2. (Không chắc nếu điều này được tính, bởi vì nó bắt đầu một máy chủ anyways) Bằng cách thực hiện một thử nghiệm tích hợp (Spring's mock MVC) mà tạo ra các đặc điểm kỹ thuật. Tôi đã mượn ý tưởng từ here.

Tôi đã tóm tắt nghiên cứu của mình trong một dự án đơn giản nằm ở here. Xem phần Automation. Mã và các ví dụ được bao gồm.

Các vấn đề liên quan