web-dev-qa-db-ja.com

ジャージー+ Swagger + Swagger-UI + Maven構成

ジャージーとメイヴンと一緒に初めて闊歩しようとしていますが、正しい道を進んでいるのだろうかと思っています。ローカルコンピューターでジャージ、Maven、Swaggerを使用しています。すぐに、それをさまざまな環境にデプロイして、swagger-uiを含めたいと思います。

  1. Web.xmlファイルを<param-value>http://localhost:8080/api</param-value>に構成すると、ローカルコンピューターでSwaggerが機能することがわかります。ただし、コードをさまざまな環境(たとえば、開発環境からQA環境、本番環境に移行する)にデプロイするたびに、このアドレスを変更する必要がありますか?その場合、どのように変更しますか?不可能/闊歩の意味ではない?

  2. プロジェクトにswagger-uiを組み込みたいです。 gitから手動でファイルをダウンロードしてプロジェクトに配置するというオンラインの提案が表示されます。しかし、私が疑問に思っているのは、代わりに使用できるMaven依存関係があるかどうかです。これにより、Mavenを使用して、swagger-uiを使用するために必要なコードを取得し、ジャージで動作するように構成できます。もしそうなら、依存関係は何ですか?それを使用して複数の環境にコードをデプロイするにはどうすればよいですか?

私はこのテクノロジーに慣れていないので、可能であれば、ガイダンスとチュートリアルへのリンクを提供してください。また、gitからコードを手動でダウンロードせずにjersey/swagger/swagger-ui/mavenを使用し、複数の環境にコードをデプロイできるという思考プロセスが途方に暮れている場合は、別の使用方法を探すことができるようにお知らせください。 REST私のアプリケーションでは。

ご協力ありがとうございました。

pom.xml:

    <repositories>
      <repository>
          <id>maven2-repository.Java.net</id>
          <name>Java.net Repository for Maven</name>
          <url>http://download.Java.net/maven/2/</url>
          <layout>default</layout>
      </repository>
  </repositories>

  <properties>
      <jersey2.version>2.19</jersey2.version>
      <jaxrs.version>2.0.1</jaxrs.version>
  </properties>

  <!-- Dependencies -->
  <dependencies>


    <!-- JAX-RS -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>${jaxrs.version}</version>
    </dependency>
    <!-- Jersey 2.19 -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey2.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey2.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey2.version}</version>
    </dependency>

     <!-- Servlet Library -->
     <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>3.1.0</version>
         <scope>provided</scope>
     </dependency>

     <!-- Spring dependencies -->
     <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>4.1.4.RELEASE</version>
     </dependency>

     <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>4.1.4.RELEASE</version>
     </dependency>

     <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>4.1.4.RELEASE</version>
     </dependency>

    <!-- Junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jersey2-jaxrs</artifactId>
        <version>1.5.0</version>
    </dependency>
  </dependencies>

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://Java.Sun.com/xml/ns/javaee"
  xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="WebApp_ID" version="3.0">

  <display-name>HelloWorldSpring</display-name>

  <servlet>
      <servlet-name>spring-mvc</servlet-name>
      <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>    

  <servlet-mapping>
      <servlet-name>spring-mvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>

  <servlet>
      <servlet-name>jersey-serlvet</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
      <init-param>
           <param-name>jersey.config.server.provider.packages</param-name>
           <param-value>
           io.swagger.jaxrs.listing, 
           com.jer.rest
           </param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
      <servlet-name>jersey-serlvet</servlet-name>
      <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>


   <servlet>
      <servlet-name>Jersey2Config</servlet-name>
      <servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
      <init-param>
          <param-name>api.version</param-name>
          <param-value>1.0.0</param-value>
      </init-param>
      <init-param>
          <param-name>swagger.api.basepath</param-name>
          <param-value>http://localhost:8080/HealthTracker/rest</param-value>
      </init-param>
      <load-on-startup>2</load-on-startup>
  </servlet>

   <!-- Other XML Configuration -->
  <!-- Load by Spring ContextLoaderListener -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/root-context.xml</param-value>
  </context-param>


   <!-- Spring ContextLoaderListener -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

</web-app>
8
user2719805

これがあなたの質問に答えると私が思うものです:

  1. さまざまな環境ごとにSwaggerを構成できるようにするには、次の手順に従うことができます。

    i)Bootstrapクラスを作成してSwagger Beanを構成します(参照: https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey- 2.X-Project-Setup-1.5 および Swagger UIを使用したApiバージョンの設定

    ii)プロパティファイルの値を使用して上記のBeanの値を設定します。このファイルは、どの環境でもコードの外部で簡単に構成できます。

  2. Swagger distは、html/css/image/jsファイルで構成されています。 Mavenjar依存関係として追加することはできません。

お役に立てれば!

1
Sampada

リンクをチェックしてください https://github.com/swagger-api/swagger-samples/tree/2.0/Java

プロジェクトでSwagger3.0を構成する方法に関する優れた例があります(Java-jersey2-webxmlの例を参照)。以前のバージョンについては、ブランチを確認してください

Uiに関する限り、必要なファイルをダウンロードするか、pom.xmlに以下の依存関係を追加することができます。

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>swagger-ui</artifactId>
    <version>3.6.1</version>
</dependency>

必要なUIファイルをダウンロードします。ダウンロードしたindex.htmlをプロジェクトにコピーして、URLを編集できます。

2

私は同じ問題に直面し、Jerseyプロジェクトに含まれている場合にswagger 3.0UIを追加するライブラリを作成しました。ご覧ください コード および ブログ投稿 アイデアは、すべてのSwagger UI静的コンテンツがライブラリにパッケージ化され、実行時に抽出されるというものです。さらに、ライブラリはSwagger UIのWebコンテキストの作成を処理し、openapi.jsonファイルへの参照を調整します。 2つのプロパティとこのコードをプロジェクトに追加する必要があります。

SwaggerContext.addSwaggerServlet(Tomcat, context,
    ConfigBuilder.builder(ConfigType.TYPE_SAFE)
            .build()
            .getConfig("swagger"),
    EmailApplication.class);

およびプロパティ:

swagger.package="com.itzap"
swagger.apiBaseUrl="http://{application url}"

他のすべての構成がデフォルトのままの場合、SwaggerUIには次のURLからアクセスできます。

http://{application base URL}/api/v1/swagger 
0
Aleksey

ここでは、Javaドックレット(Swaggerアノテーションは不要)を使用したソリューションです。 maven-javadoc-plugin を使用し、 swagger-doclet を構成します。 代替ドックレット として。 mavenプロファイル を使用すると、さまざまな環境を管理できます。

<profile>
    <id>dev</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <executions>
                    <execution>
                        <id>generate-service-docs</id>
                        <phase>generate-resources</phase>
                        <configuration>
                            <doclet>com.carma.swagger.doclet.ServiceDoclet</doclet>
                            <docletArtifact>
                                <groupId>com.carma</groupId>
                                <artifactId>swagger-doclet</artifactId>
                                <version>1.0.3</version>
                            </docletArtifact>
                            <reportOutputDirectory>${project.build.outputDirectory}</reportOutputDirectory>
                            <useStandardDocletOptions>false</useStandardDocletOptions>
                            <additionalparam>-apiVersion 1 -docBasePath
                                https://example.com/apidocs -apiBasePath
                                https://example.com/api -swaggerUiPath
                                ../../../src/main/resources/swagger-ui/
                            </additionalparam>
                        </configuration>
                        <goals>
                            <goal>javadoc</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

Swaggerリソースをプロジェクトに直接入れました。そのため、cssとhtmlをカスタマイズするのは簡単でした。

swagger-resources

または、swaggerをリポジトリに配置したくない場合は、 frotend-maven-plugin を使用してjs/cssの依存関係を管理できます(例: swagger-ui )with bower

組み込みサーバーから静的リソースとしてSwaggerを直接配信します(私の場合はgrizzlyを使用しました):

String apiDocs = Env.getApiDocs();         
server.getServerConfiguration().addHttpHandler(
    new CLStaticHttpHandler(GrizzlyStarter.class.getClassLoader(), apiDocs), apiDocs);
0
Meiko Rachimow