Spring Boot 2.x基礎教程:Swagger靜態文件的生成

qq_24431641發表於2020-12-27

Swagger2Markup簡介
Swagger2Markup是Github上的一個開源專案。該專案主要用來將Swagger自動生成的文件轉換成幾種流行的格式以便於靜態部署和使用,比如:AsciiDoc、Markdown、Confluence。

專案主頁:https://github.com/Swagger2Markup/swagger2markup

如何使用
在使用Swagger2Markup之前,我們先需要準備一個使用了Swagger的Web專案,可以是直接使用Swagger2的專案,也可以使用Spring Boot 2.x基礎教程:使用Swagger2構建強大的API文件一文中構建的專案。讀者可以通過下面的倉庫獲取:

Github:https://github.com/dyc87112/SpringBoot-Learning/tree/2.x
Gitee:https://gitee.com/didispace/SpringBoot-Learning/tree/2.x
接下來,我們將利用這個專案中的chapter2-2模組作為基礎來來生成幾種不同格式的靜態文件。

生成 AsciiDoc 文件
生成 AsciiDoc 文件的方式有兩種:

通過Java程式碼來生成
第一步:編輯pom.xml增加需要使用的相關依賴和倉庫

...
<dependency>
    <groupId>io.github.swagger2markup</groupId>
    <artifactId>swagger2markup</artifactId>
    <version>1.3.3</version>
    <scope>test</scope>
</dependency>
false jcenter-releases jcenter http://jcenter.bintray.com 本身這個工具主要就臨時用一下,所以這裡我們把scope設定為test,這樣這個依賴就不會打包到正常執行環境中去。

第二步:編寫一個單元測試用例來生成執行生成文件的程式碼

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DemoApplicationTests {

@Test
public void generateAsciiDocs() throws Exception {

    URL remoteSwaggerFile = new URL("http://localhost:8080/v2/api-docs");
    Path outputDirectory = Paths.get("src/docs/asciidoc/generated");

    //    輸出Ascii格式
    Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
            .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
            .build();


    Swagger2MarkupConverter.from(remoteSwaggerFile)
            .withConfig(config)
            .build()
            .toFolder(outputDirectory);
}

}
以上程式碼內容很簡單,大致說明幾個關鍵內容:

MarkupLanguage.ASCIIDOC:指定了要輸出的最終格式。除了ASCIIDOC之外,還有MARKDOWN和CONFLUENCE_MARKUP,分別定義了其他格式,後面會具體舉例。
from(remoteSwaggerFile:指定了生成靜態部署文件的源頭配置,可以是這樣的URL形式,也可以是符合Swagger規範的String型別或者從檔案中讀取的流。如果是對當前使用的Swagger專案,我們通過使用訪問本地Swagger介面的方式,如果是從外部獲取的Swagger文件配置檔案,就可以通過字串或讀檔案的方式
toFolder(outputDirectory):指定最終生成檔案的具體目錄位置
在執行了上面的測試用例之後,我們就能在當前專案的src目錄下獲得如下內容:

src
–docs
----asciidoc
------generated
--------definitions.adoc
--------overview.adoc
--------paths.adoc
--------security.adoc
可以看到,這種方式在執行之後就生成出了4個不同的靜態檔案。

輸出到單個檔案

如果不想分割結果檔案,也可以通過替換toFolder(Paths.get(“src/docs/asciidoc/generated”)為toFile(Paths.get(“src/docs/asciidoc/generated/all”)),將轉換結果輸出到一個單一的檔案中,這樣可以最終生成html的也是單一的。

通過 Maven 外掛來生成
除了通過上面編寫Java程式碼來生成的方式之外,swagger2markup還提供了對應的Maven外掛來使用。對於上面的生成方式,完全可以通過在pom.xml中增加如下外掛來完成靜態內容的生成。

io.github.swagger2markup swagger2markup-maven-plugin 1.3.3 http://localhost:8080/v2/api-docs src/docs/asciidoc/generated-by-plugin

生成HTML
在完成了從Swagger文件配置檔案到AsciiDoc的原始檔轉換之後,就是如何將AsciiDoc轉換成可部署的HTML內容了。這裡繼續在上面的工程基礎上,引入一個Maven外掛來完成。

org.asciidoctor asciidoctor-maven-plugin 1.5.6 src/docs/asciidoc/generated src/docs/asciidoc/html html coderay left 通過上面的配置,執行該外掛的asciidoctor:process-asciidoc命令之後,就能在src/docs/asciidoc/html目錄下生成最終可用的靜態部署HTML了。在完成生成之後,可以直接通過瀏覽器來看檢視,你就能看到類似下圖的靜態部署結果:

是不是感覺似曾相識呢?是的,Spring Cloud的E版之前的文件也是這樣的!!!

Markdown 與 Confluence 的支援
要生成Markdown和Confluence的方式非常簡單,與上一篇中的方法類似,只需要修改一個引數即可。

生成 Markdown 和 Confluence 文件
生成方式有一下兩種:

通過Java程式碼來生成:只需要修改withMarkupLanguage屬性來指定不同的格式以及toFolder屬性為結果指定不同的輸出目錄。
生成markdown的程式碼片段:

URL remoteSwaggerFile = new URL(“http://localhost:8080/v2/api-docs”);
Path outputDirectory = Paths.get(“src/docs/markdown/generated”);

// 輸出Ascii格式
Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
.withMarkupLanguage(MarkupLanguage.MARKDOWN)
.build();

Swagger2MarkupConverter.from(remoteSwaggerFile)
.withConfig(config)
.build()
.toFolder(outputDirectory);
生成confluence的程式碼片段:

URL remoteSwaggerFile = new URL(“http://localhost:8080/v2/api-docs”);
Path outputDirectory = Paths.get(“src/docs/confluence/generated”);

// 輸出Ascii格式
Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
.withMarkupLanguage(MarkupLanguage.CONFLUENCE_MARKUP)
.build();

Swagger2MarkupConverter.from(remoteSwaggerFile)
.withConfig(config)
.build()
.toFolder(outputDirectory);
在執行了上面的設定內容之後,我們就能在當前專案的src目錄下獲得如下內容:

src
–docs
----confluence
------generated
--------definitions.txt
--------overview.txt
--------paths.txt
--------security.txt
----markdown
------generated
--------definitions.md
--------overview.md
--------paths.md
--------security.md
可以看到,執行之後分別在markdown和confluence目錄下輸出了不同格式的轉換內容。如果讀者想要通過外掛來生成,直接參考上一節內容,只需要修改外掛配置中的swagger2markup.markupLanguage即可支援輸出其他格式內容。

最後,我們一起來看看生成的Markdown和Confluence文件要怎麼使用

Markdown的部署
Markdown目前在文件編寫中使用非常常見,所以可用的靜態部署工具也非常多,比如:Hexo、Jekyll等都可以輕鬆地實現靜態化部署,也可以使用一些SaaS版本的文件工具,比如:語雀等。具體使用方法,這裡按照這些工具的文件都非常詳細,這裡就不具體介紹了。

Confluence的部署
相信很多團隊都使用Confluence作為文件管理系統,所以下面具體說說Confluence格式生成結果的使用。

第一步:在Confluence的新建頁面的工具欄中選擇{}Markup
https://github.com/qyf0xklw/txdfvjrbzp/discussions/301
https://github.com/7jxumfpc/mgmiqswogs/discussions/307
https://github.com/qyf0xklw/txdfvjrbzp/discussions/302
https://github.com/7jxumfpc/mgmiqswogs/discussions/308
https://github.com/7jxumfpc/mgmiqswogs/discussions/309
https://github.com/qyf0xklw/txdfvjrbzp/discussions/303
https://github.com/qyf0xklw/txdfvjrbzp/discussions/304
https://github.com/qyf0xklw/txdfvjrbzp/discussions/305
https://github.com/7jxumfpc/mgmiqswogs/discussions/310
https://github.com/qyf0xklw/txdfvjrbzp/discussions/306
https://github.com/7jxumfpc/mgmiqswogs/discussions/311
https://github.com/7jxumfpc/mgmiqswogs/discussions/312
https://github.com/7jxumfpc/mgmiqswogs/discussions/313
https://github.com/7jxumfpc/mgmiqswogs/discussions/314
https://github.com/7jxumfpc/mgmiqswogs/discussions/315
https://github.com/7jxumfpc/mgmiqswogs/discussions/316
https://github.com/qyf0xklw/txdfvjrbzp/discussions/307
https://github.com/7jxumfpc/mgmiqswogs/discussions/317
https://github.com/qyf0xklw/txdfvjrbzp/discussions/308
https://github.com/7jxumfpc/mgmiqswogs/discussions/318
https://github.com/qyf0xklw/txdfvjrbzp/discussions/309
https://github.com/7jxumfpc/mgmiqswogs/discussions/319
https://github.com/qyf0xklw/txdfvjrbzp/discussions/310
https://github.com/qyf0xklw/txdfvjrbzp/discussions/311
https://github.com/7jxumfpc/mgmiqswogs/discussions/320
https://github.com/qyf0xklw/txdfvjrbzp/discussions/312
https://github.com/7jxumfpc/mgmiqswogs/discussions/321
https://github.com/qyf0xklw/txdfvjrbzp/discussions/313
https://github.com/7jxumfpc/mgmiqswogs/discussions/322
https://github.com/7jxumfpc/mgmiqswogs/discussions/323
https://github.com/qyf0xklw/txdfvjrbzp/discussions/314
https://github.com/7jxumfpc/mgmiqswogs/discussions/324
https://github.com/qyf0xklw/txdfvjrbzp/discussions/315
https://github.com/7jxumfpc/mgmiqswogs/discussions/325
https://github.com/qyf0xklw/txdfvjrbzp/discussions/316
https://github.com/qyf0xklw/txdfvjrbzp/discussions/317
https://github.com/7jxumfpc/mgmiqswogs/discussions/326
https://github.com/qyf0xklw/txdfvjrbzp/discussions/318
https://github.com/7jxumfpc/mgmiqswogs/discussions/327
https://github.com/qyf0xklw/txdfvjrbzp/discussions/319
https://github.com/7jxumfpc/mgmiqswogs/discussions/328
https://github.com/qyf0xklw/txdfvjrbzp/discussions/320
https://github.com/7jxumfpc/mgmiqswogs/discussions/329
https://github.com/qyf0xklw/txdfvjrbzp/discussions/321
https://github.com/7jxumfpc/mgmiqswogs/discussions/330
https://github.com/7jxumfpc/mgmiqswogs/discussions/331
https://github.com/qyf0xklw/txdfvjrbzp/discussions/322
https://github.com/qyf0xklw/txdfvjrbzp/discussions/323
https://github.com/7jxumfpc/mgmiqswogs/discussions/332
https://github.com/qyf0xklw/txdfvjrbzp/discussions/324
https://github.com/7jxumfpc/mgmiqswogs/discussions/333
https://github.com/qyf0xklw/txdfvjrbzp/discussions/325
https://github.com/7jxumfpc/mgmiqswogs/discussions/334
https://github.com/qyf0xklw/txdfvjrbzp/discussions/326
https://github.com/7jxumfpc/mgmiqswogs/discussions/335
https://github.com/qyf0xklw/txdfvjrbzp/discussions/327
https://github.com/7jxumfpc/mgmiqswogs/discussions/336
https://github.com/qyf0xklw/txdfvjrbzp/discussions/328
https://github.com/7jxumfpc/mgmiqswogs/discussions/337
https://github.com/qyf0xklw/txdfvjrbzp/discussions/329
https://github.com/7jxumfpc/mgmiqswogs/discussions/338
https://github.com/qyf0xklw/txdfvjrbzp/discussions/330
https://github.com/qyf0xklw/txdfvjrbzp/discussions/331
https://github.com/7jxumfpc/mgmiqswogs/discussions/339
https://github.com/qyf0xklw/txdfvjrbzp/discussions/332
https://github.com/7jxumfpc/mgmiqswogs/discussions/340
https://github.com/qyf0xklw/txdfvjrbzp/discussions/333
https://github.com/7jxumfpc/mgmiqswogs/discussions/341
https://github.com/7jxumfpc/mgmiqswogs/discussions/342
https://github.com/qyf0xklw/txdfvjrbzp/discussions/334
https://github.com/7jxumfpc/mgmiqswogs/discussions/343
https://github.com/qyf0xklw/txdfvjrbzp/discussions/335
https://github.com/7jxumfpc/mgmiqswogs/discussions/344
https://github.com/qyf0xklw/txdfvjrbzp/discussions/336
https://github.com/qyf0xklw/txdfvjrbzp/discussions/337
https://github.com/7jxumfpc/mgmiqswogs/discussions/345
https://github.com/7jxumfpc/mgmiqswogs/discussions/346
https://github.com/7jxumfpc/mgmiqswogs/discussions/347
https://github.com/qyf0xklw/txdfvjrbzp/discussions/338
https://github.com/7jxumfpc/mgmiqswogs/discussions/348
https://github.com/qyf0xklw/txdfvjrbzp/discussions/339
https://github.com/7jxumfpc/mgmiqswogs/discussions/349
https://github.com/qyf0xklw/txdfvjrbzp/discussions/340
https://github.com/7jxumfpc/mgmiqswogs/discussions/350
https://github.com/7jxumfpc/mgmiqswogs/discussions/351
https://github.com/qyf0xklw/txdfvjrbzp/discussions/341
https://github.com/7jxumfpc/mgmiqswogs/discussions/352
https://github.com/qyf0xklw/txdfvjrbzp/discussions/342
https://github.com/7jxumfpc/mgmiqswogs/discussions/353
https://github.com/7jxumfpc/mgmiqswogs/discussions/354
https://github.com/qyf0xklw/txdfvjrbzp/discussions/343
https://github.com/7jxumfpc/mgmiqswogs/discussions/355
https://github.com/qyf0xklw/txdfvjrbzp/discussions/344
https://github.com/7jxumfpc/mgmiqswogs/discussions/356
https://github.com/qyf0xklw/txdfvjrbzp/discussions/345
https://github.com/qyf0xklw/txdfvjrbzp/discussions/346
https://github.com/7jxumfpc/mgmiqswogs/discussions/357
https://github.com/7jxumfpc/mgmiqswogs/discussions/358
https://github.com/7jxumfpc/mgmiqswogs/discussions/359
https://github.com/7jxumfpc/mgmiqswogs/discussions/360
https://github.com/7jxumfpc/mgmiqswogs/discussions/361
https://github.com/7jxumfpc/mgmiqswogs/discussions/362
https://github.com/qyf0xklw/txdfvjrbzp/discussions/347
https://github.com/7jxumfpc/mgmiqswogs/discussions/363
https://github.com/7jxumfpc/mgmiqswogs/discussions/364
https://github.com/qyf0xklw/txdfvjrbzp/discussions/348
https://github.com/qyf0xklw/txdfvjrbzp/discussions/349
https://github.com/qyf0xklw/txdfvjrbzp/discussions/350
https://github.com/qyf0xklw/txdfvjrbzp/discussions/351
https://github.com/7jxumfpc/mgmiqswogs/discussions/365
https://github.com/qyf0xklw/txdfvjrbzp/discussions/352
https://github.com/qyf0xklw/txdfvjrbzp/discussions/353
https://github.com/7jxumfpc/mgmiqswogs/discussions/366
https://github.com/7jxumfpc/mgmiqswogs/discussions/367
https://github.com/qyf0xklw/txdfvjrbzp/discussions/354
https://github.com/qyf0xklw/txdfvjrbzp/discussions/355
https://github.com/qyf0xklw/txdfvjrbzp/discussions/356
https://github.com/qyf0xklw/txdfvjrbzp/discussions/357
https://github.com/qyf0xklw/txdfvjrbzp/discussions/358
https://github.com/7jxumfpc/mgmiqswogs/discussions/368
https://github.com/qyf0xklw/txdfvjrbzp/discussions/359
https://github.com/7jxumfpc/mgmiqswogs/discussions/369
https://github.com/qyf0xklw/txdfvjrbzp/discussions/360
https://github.com/qyf0xklw/txdfvjrbzp/discussions/361
https://github.com/7jxumfpc/mgmiqswogs/discussions/370
https://github.com/7jxumfpc/mgmiqswogs/discussions/371
https://github.com/7jxumfpc/mgmiqswogs/discussions/372
https://github.com/7jxumfpc/mgmiqswogs/discussions/373
https://github.com/qyf0xklw/txdfvjrbzp/discussions/362
https://github.com/7jxumfpc/mgmiqswogs/discussions/374
https://github.com/7jxumfpc/mgmiqswogs/discussions/375
https://github.com/qyf0xklw/txdfvjrbzp/discussions/363
https://github.com/7jxumfpc/mgmiqswogs/discussions/376
https://github.com/7jxumfpc/mgmiqswogs/discussions/377
https://github.com/qyf0xklw/txdfvjrbzp/discussions/364
https://github.com/7jxumfpc/mgmiqswogs/discussions/378
https://github.com/7jxumfpc/mgmiqswogs/discussions/379
https://github.com/qyf0xklw/txdfvjrbzp/discussions/365
https://github.com/qyf0xklw/txdfvjrbzp/discussions/366
https://github.com/qyf0xklw/txdfvjrbzp/discussions/367
https://github.com/7jxumfpc/mgmiqswogs/discussions/380
https://github.com/qyf0xklw/txdfvjrbzp/discussions/368
https://github.com/qyf0xklw/txdfvjrbzp/discussions/369
https://github.com/djvb5gwz/kdnyzskenz/discussions/853
https://github.com/tygq5nux/jkgibzxucg/discussions/839
https://github.com/djvb5gwz/kdnyzskenz/discussions/854
https://github.com/djvb5gwz/kdnyzskenz/discussions/855
https://github.com/tygq5nux/jkgibzxucg/discussions/840
https://github.com/tygq5nux/jkgibzxucg/discussions/841
https://github.com/tygq5nux/jkgibzxucg/discussions/842
https://github.com/tygq5nux/jkgibzxucg/discussions/843
https://github.com/tygq5nux/jkgibzxucg/discussions/844
https://github.com/djvb5gwz/kdnyzskenz/discussions/856
https://github.com/tygq5nux/jkgibzxucg/discussions/845
https://github.com/tygq5nux/jkgibzxucg/discussions/846
https://github.com/djvb5gwz/kdnyzskenz/discussions/857
https://github.com/tygq5nux/jkgibzxucg/discussions/847
https://github.com/djvb5gwz/kdnyzskenz/discussions/858
https://github.com/tygq5nux/jkgibzxucg/discussions/848
https://github.com/djvb5gwz/kdnyzskenz/discussions/859
https://github.com/tygq5nux/jkgibzxucg/discussions/849
https://github.com/djvb5gwz/kdnyzskenz/discussions/860
https://github.com/tygq5nux/jkgibzxucg/discussions/850
https://github.com/djvb5gwz/kdnyzskenz/discussions/861
https://github.com/tygq5nux/jkgibzxucg/discussions/851
https://github.com/tygq5nux/jkgibzxucg/discussions/852
https://github.com/djvb5gwz/kdnyzskenz/discussions/862
https://github.com/djvb5gwz/kdnyzskenz/discussions/863
https://github.com/tygq5nux/jkgibzxucg/discussions/853
https://github.com/tygq5nux/jkgibzxucg/discussions/854
https://github.com/tygq5nux/jkgibzxucg/discussions/855
https://github.com/djvb5gwz/kdnyzskenz/discussions/864
https://github.com/tygq5nux/jkgibzxucg/discussions/856
https://github.com/djvb5gwz/kdnyzskenz/discussions/865
https://github.com/tygq5nux/jkgibzxucg/discussions/857
https://github.com/djvb5gwz/kdnyzskenz/discussions/866
https://github.com/tygq5nux/jkgibzxucg/discussions/858
https://github.com/djvb5gwz/kdnyzskenz/discussions/867
https://github.com/tygq5nux/jkgibzxucg/discussions/859
https://github.com/djvb5gwz/kdnyzskenz/discussions/868
https://github.com/tygq5nux/jkgibzxucg/discussions/860
https://github.com/djvb5gwz/kdnyzskenz/discussions/869
https://github.com/tygq5nux/jkgibzxucg/discussions/861
https://github.com/djvb5gwz/kdnyzskenz/discussions/870
https://github.com/djvb5gwz/kdnyzskenz/discussions/871
https://github.com/tygq5nux/jkgibzxucg/discussions/862
https://github.com/djvb5gwz/kdnyzskenz/discussions/872
https://github.com/tygq5nux/jkgibzxucg/discussions/863
https://github.com/djvb5gwz/kdnyzskenz/discussions/873
https://github.com/tygq5nux/jkgibzxucg/discussions/864
https://github.com/djvb5gwz/kdnyzskenz/discussions/874
https://github.com/djvb5gwz/kdnyzskenz/discussions/875
https://github.com/tygq5nux/jkgibzxucg/discussions/865
https://github.com/djvb5gwz/kdnyzskenz/discussions/876
https://github.com/tygq5nux/jkgibzxucg/discussions/866
https://github.com/djvb5gwz/kdnyzskenz/discussions/877
https://github.com/tygq5nux/jkgibzxucg/discussions/867
https://github.com/djvb5gwz/kdnyzskenz/discussions/878
https://github.com/tygq5nux/jkgibzxucg/discussions/868
https://github.com/djvb5gwz/kdnyzskenz/discussions/879
https://github.com/tygq5nux/jkgibzxucg/discussions/869
https://github.com/djvb5gwz/kdnyzskenz/discussions/880
https://github.com/tygq5nux/jkgibzxucg/discussions/870
https://github.com/djvb5gwz/kdnyzskenz/discussions/881
https://github.com/tygq5nux/jkgibzxucg/discussions/871
https://github.com/djvb5gwz/kdnyzskenz/discussions/882
https://github.com/tygq5nux/jkgibzxucg/discussions/872
https://github.com/djvb5gwz/kdnyzskenz/discussions/883
https://github.com/djvb5gwz/kdnyzskenz/discussions/884
https://github.com/djvb5gwz/kdnyzskenz/discussions/885
https://github.com/tygq5nux/jkgibzxucg/discussions/873
https://github.com/tygq5nux/jkgibzxucg/discussions/874
https://github.com/djvb5gwz/kdnyzskenz/discussions/886
https://github.com/djvb5gwz/kdnyzskenz/discussions/887
https://github.com/tygq5nux/jkgibzxucg/discussions/875
https://github.com/djvb5gwz/kdnyzskenz/discussions/888
https://github.com/tygq5nux/jkgibzxucg/discussions/876
https://github.com/tygq5nux/jkgibzxucg/discussions/877
https://github.com/djvb5gwz/kdnyzskenz/discussions/889
https://github.com/tygq5nux/jkgibzxucg/discussions/878
https://github.com/djvb5gwz/kdnyzskenz/discussions/890
https://github.com/tygq5nux/jkgibzxucg/discussions/879
https://github.com/djvb5gwz/kdnyzskenz/discussions/891
https://github.com/djvb5gwz/kdnyzskenz/discussions/892
https://github.com/tygq5nux/jkgibzxucg/discussions/880
https://github.com/djvb5gwz/kdnyzskenz/discussions/893
https://github.com/tygq5nux/jkgibzxucg/discussions/881
https://github.com/djvb5gwz/kdnyzskenz/discussions/894
https://github.com/tygq5nux/jkgibzxucg/discussions/882
https://github.com/djvb5gwz/kdnyzskenz/discussions/895
https://github.com/tygq5nux/jkgibzxucg/discussions/883
https://github.com/djvb5gwz/kdnyzskenz/discussions/896
https://github.com/tygq5nux/jkgibzxucg/discussions/884
https://github.com/djvb5gwz/kdnyzskenz/discussions/897
https://github.com/tygq5nux/jkgibzxucg/discussions/885
https://github.com/djvb5gwz/kdnyzskenz/discussions/898
https://github.com/tygq5nux/jkgibzxucg/discussions/886
https://github.com/djvb5gwz/kdnyzskenz/discussions/899
https://github.com/djvb5gwz/kdnyzskenz/discussions/900
https://github.com/tygq5nux/jkgibzxucg/discussions/887
https://github.com/djvb5gwz/kdnyzskenz/discussions/901
https://github.com/tygq5nux/jkgibzxucg/discussions/888
https://github.com/djvb5gwz/kdnyzskenz/discussions/902
https://github.com/tygq5nux/jkgibzxucg/discussions/889
https://github.com/djvb5gwz/kdnyzskenz/discussions/903
https://github.com/tygq5nux/jkgibzxucg/discussions/890
https://github.com/djvb5gwz/kdnyzskenz/discussions/904
https://github.com/djvb5gwz/kdnyzskenz/discussions/905
https://github.com/tygq5nux/jkgibzxucg/discussions/891
https://github.com/djvb5gwz/kdnyzskenz/discussions/906
https://github.com/tygq5nux/jkgibzxucg/discussions/892
https://github.com/djvb5gwz/kdnyzskenz/discussions/907
https://github.com/tygq5nux/jkgibzxucg/discussions/893
https://github.com/djvb5gwz/kdnyzskenz/discussions/908
https://github.com/tygq5nux/jkgibzxucg/discussions/894
https://github.com/tygq5nux/jkgibzxucg/discussions/895
https://github.com/djvb5gwz/kdnyzskenz/discussions/909
https://github.com/tygq5nux/jkgibzxucg/discussions/896
https://github.com/djvb5gwz/kdnyzskenz/discussions/910
https://github.com/tygq5nux/jkgibzxucg/discussions/897
https://github.com/djvb5gwz/kdnyzskenz/discussions/911
https://github.com/tygq5nux/jkgibzxucg/discussions/898
https://github.com/djvb5gwz/kdnyzskenz/discussions/912
https://github.com/djvb5gwz/kdnyzskenz/discussions/913
https://github.com/tygq5nux/jkgibzxucg/discussions/899
https://github.com/djvb5gwz/kdnyzskenz/discussions/914
https://github.com/djvb5gwz/kdnyzskenz/discussions/915
https://github.com/tygq5nux/jkgibzxucg/discussions/900
https://github.com/tygq5nux/jkgibzxucg/discussions/901
https://github.com/djvb5gwz/kdnyzskenz/discussions/916
https://github.com/tygq5nux/jkgibzxucg/discussions/902
https://github.com/djvb5gwz/kdnyzskenz/discussions/917
https://github.com/tygq5nux/jkgibzxucg/discussions/903
https://github.com/djvb5gwz/kdnyzskenz/discussions/918
https://github.com/tygq5nux/jkgibzxucg/discussions/904
https://github.com/djvb5gwz/kdnyzskenz/discussions/919
https://github.com/tygq5nux/jkgibzxucg/discussions/905
https://github.com/djvb5gwz/kdnyzskenz/discussions/920
https://github.com/tygq5nux/jkgibzxucg/discussions/906
https://github.com/djvb5gwz/kdnyzskenz/discussions/921
https://github.com/tygq5nux/jkgibzxucg/discussions/907
https://github.com/tygq5nux/jkgibzxucg/discussions/908
https://github.com/djvb5gwz/kdnyzskenz/discussions/922
https://github.com/djvb5gwz/kdnyzskenz/discussions/923
https://github.com/tygq5nux/jkgibzxucg/discussions/909
https://github.com/djvb5gwz/kdnyzskenz/discussions/924
https://github.com/tygq5nux/jkgibzxucg/discussions/910
https://github.com/djvb5gwz/kdnyzskenz/discussions/925
https://github.com/tygq5nux/jkgibzxucg/discussions/911
https://github.com/djvb5gwz/kdnyzskenz/discussions/926
https://github.com/tygq5nux/jkgibzxucg/discussions/912
https://github.com/djvb5gwz/kdnyzskenz/discussions/927
https://github.com/tygq5nux/jkgibzxucg/discussions/913
https://github.com/djvb5gwz/kdnyzskenz/discussions/928
https://github.com/tygq5nux/jkgibzxucg/discussions/914
https://github.com/djvb5gwz/kdnyzskenz/discussions/929
https://github.com/tygq5nux/jkgibzxucg/discussions/915
https://github.com/djvb5gwz/kdnyzskenz/discussions/930
https://github.com/tygq5nux/jkgibzxucg/discussions/916
https://github.com/djvb5gwz/kdnyzskenz/discussions/931
https://github.com/tygq5nux/jkgibzxucg/discussions/917
https://github.com/djvb5gwz/kdnyzskenz/discussions/932
https://github.com/tygq5nux/jkgibzxucg/discussions/918
https://github.com/djvb5gwz/kdnyzskenz/discussions/933
https://github.com/tygq5nux/jkgibzxucg/discussions/919
https://github.com/djvb5gwz/kdnyzskenz/discussions/934
https://github.com/tygq5nux/jkgibzxucg/discussions/920
https://github.com/tygq5nux/jkgibzxucg/discussions/921
https://github.com/djvb5gwz/kdnyzskenz/discussions/935
https://github.com/tygq5nux/jkgibzxucg/discussions/922
https://github.com/djvb5gwz/kdnyzskenz/discussions/936
https://github.com/tygq5nux/jkgibzxucg/discussions/923
https://github.com/djvb5gwz/kdnyzskenz/discussions/937
https://github.com/djvb5gwz/kdnyzskenz/discussions/938
https://github.com/tygq5nux/jkgibzxucg/discussions/924
https://github.com/djvb5gwz/kdnyzskenz/discussions/939
https://github.com/tygq5nux/jkgibzxucg/discussions/925
https://github.com/djvb5gwz/kdnyzskenz/discussions/940
https://github.com/tygq5nux/jkgibzxucg/discussions/926
https://github.com/djvb5gwz/kdnyzskenz/discussions/941
https://github.com/tygq5nux/jkgibzxucg/discussions/927
https://github.com/djvb5gwz/kdnyzskenz/discussions/942
https://github.com/tygq5nux/jkgibzxucg/discussions/928
https://github.com/djvb5gwz/kdnyzskenz/discussions/943
https://github.com/tygq5nux/jkgibzxucg/discussions/929
https://github.com/djvb5gwz/kdnyzskenz/discussions/944
https://github.com/tygq5nux/jkgibzxucg/discussions/930
https://github.com/djvb5gwz/kdnyzskenz/discussions/945
https://github.com/tygq5nux/jkgibzxucg/discussions/931
https://github.com/djvb5gwz/kdnyzskenz/discussions/946
https://github.com/tygq5nux/jkgibzxucg/discussions/932
https://github.com/djvb5gwz/kdnyzskenz/discussions/947
https://github.com/tygq5nux/jkgibzxucg/discussions/933
https://github.com/djvb5gwz/kdnyzskenz/discussions/948
https://github.com/tygq5nux/jkgibzxucg/discussions/934
https://github.com/djvb5gwz/kdnyzskenz/discussions/949
https://github.com/tygq5nux/jkgibzxucg/discussions/935
https://github.com/djvb5gwz/kdnyzskenz/discussions/950
https://github.com/tygq5nux/jkgibzxucg/discussions/936
https://github.com/djvb5gwz/kdnyzskenz/discussions/951
https://github.com/tygq5nux/jkgibzxucg/discussions/937
https://github.com/djvb5gwz/kdnyzskenz/discussions/952
https://github.com/tygq5nux/jkgibzxucg/discussions/938
https://github.com/djvb5gwz/kdnyzskenz/discussions/953
https://github.com/tygq5nux/jkgibzxucg/discussions/939
https://github.com/djvb5gwz/kdnyzskenz/discussions/954
https://github.com/tygq5nux/jkgibzxucg/discussions/940
https://github.com/djvb5gwz/kdnyzskenz/discussions/955
https://github.com/tygq5nux/jkgibzxucg/discussions/941
https://github.com/djvb5gwz/kdnyzskenz/discussions/956
https://github.com/tygq5nux/jkgibzxucg/discussions/942
https://github.com/djvb5gwz/kdnyzskenz/discussions/957
https://github.com/tygq5nux/jkgibzxucg/discussions/943
https://github.com/tygq5nux/jkgibzxucg/discussions/944
https://github.com/djvb5gwz/kdnyzskenz/discussions/958
https://github.com/tygq5nux/jkgibzxucg/discussions/945
https://github.com/djvb5gwz/kdnyzskenz/discussions/959
https://github.com/tygq5nux/jkgibzxucg/discussions/946
https://github.com/djvb5gwz/kdnyzskenz/discussions/960
https://github.com/tygq5nux/jkgibzxucg/discussions/947
https://github.com/djvb5gwz/kdnyzskenz/discussions/961
https://github.com/tygq5nux/jkgibzxucg/discussions/948
https://github.com/tygq5nux/jkgibzxucg/discussions/949
https://github.com/djvb5gwz/kdnyzskenz/discussions/962
https://github.com/tygq5nux/jkgibzxucg/discussions/950
https://github.com/djvb5gwz/kdnyzskenz/discussions/963
https://github.com/tygq5nux/jkgibzxucg/discussions/951
https://github.com/djvb5gwz/kdnyzskenz/discussions/964
https://github.com/tygq5nux/jkgibzxucg/discussions/952
https://github.com/djvb5gwz/kdnyzskenz/discussions/965
https://github.com/tygq5nux/jkgibzxucg/discussions/953
https://github.com/djvb5gwz/kdnyzskenz/discussions/966
https://github.com/tygq5nux/jkgibzxucg/discussions/955
https://github.com/djvb5gwz/kdnyzskenz/discussions/967
https://github.com/djvb5gwz/kdnyzskenz/discussions/968
https://github.com/tygq5nux/jkgibzxucg/discussions/956
https://github.com/djvb5gwz/kdnyzskenz/discussions/969
https://github.com/tygq5nux/jkgibzxucg/discussions/957
https://github.com/djvb5gwz/kdnyzskenz/discussions/970
https://github.com/tygq5nux/jkgibzxucg/discussions/958
https://github.com/djvb5gwz/kdnyzskenz/discussions/971
https://github.com/tygq5nux/jkgibzxucg/discussions/959
https://github.com/djvb5gwz/kdnyzskenz/discussions/972
https://github.com/tygq5nux/jkgibzxucg/discussions/960
https://github.com/tygq5nux/jkgibzxucg/discussions/961
https://github.com/djvb5gwz/kdnyzskenz/discussions/973
https://github.com/tygq5nux/jkgibzxucg/discussions/962
https://github.com/djvb5gwz/kdnyzskenz/discussions/974
https://github.com/tygq5nux/jkgibzxucg/discussions/963
https://github.com/djvb5gwz/kdnyzskenz/discussions/975
https://github.com/tygq5nux/jkgibzxucg/discussions/964
https://github.com/djvb5gwz/kdnyzskenz/discussions/976
https://github.com/tygq5nux/jkgibzxucg/discussions/965
https://github.com/djvb5gwz/kdnyzskenz/discussions/977
https://github.com/tygq5nux/jkgibzxucg/discussions/966
https://github.com/djvb5gwz/kdnyzskenz/discussions/978
https://github.com/djvb5gwz/kdnyzskenz/discussions/979
https://github.com/tygq5nux/jkgibzxucg/discussions/967
https://github.com/djvb5gwz/kdnyzskenz/discussions/980
https://github.com/tygq5nux/jkgibzxucg/discussions/968
https://github.com/tygq5nux/jkgibzxucg/discussions/969
https://github.com/djvb5gwz/kdnyzskenz/discussions/981
https://github.com/djvb5gwz/kdnyzskenz/discussions/982
https://github.com/tygq5nux/jkgibzxucg/discussions/970
https://github.com/djvb5gwz/kdnyzskenz/discussions/983
https://github.com/tygq5nux/jkgibzxucg/discussions/971
https://github.com/djvb5gwz/kdnyzskenz/discussions/984
https://github.com/djvb5gwz/kdnyzskenz/discussions/985
https://github.com/tygq5nux/jkgibzxucg/discussions/972
https://github.com/tygq5nux/jkgibzxucg/discussions/973
https://github.com/djvb5gwz/kdnyzskenz/discussions/986
https://github.com/tygq5nux/jkgibzxucg/discussions/974
https://github.com/djvb5gwz/kdnyzskenz/discussions/987
https://github.com/tygq5nux/jkgibzxucg/discussions/975
https://github.com/djvb5gwz/kdnyzskenz/discussions/988
https://github.com/tygq5nux/jkgibzxucg/discussions/976
https://github.com/djvb5gwz/kdnyzskenz/discussions/989
https://github.com/tygq5nux/jkgibzxucg/discussions/977
https://github.com/djvb5gwz/kdnyzskenz/discussions/990
https://github.com/tygq5nux/jkgibzxucg/discussions/978
https://github.com/djvb5gwz/kdnyzskenz/discussions/991

img

第二步:在彈出框的Insert選項中選擇Confluence Wiki,然後將生成的txt檔案中的內容,黏貼在左側的輸入框中;此時,在右側的閱覽框可以看到如下圖的效果了。

img

注意:所以Insert選項中也提供了Markdown格式,我們也可以用上面生成的Markdown結果來使用,但是效果並不好,所以在Confluence中使用專門的生成結果為佳。

相關文章