在某些机器上构建时,带有弹簧靴的 Swagger 可以工作,但在其他机器上则不行
Posted
技术标签:
【中文标题】在某些机器上构建时,带有弹簧靴的 Swagger 可以工作,但在其他机器上则不行【英文标题】:Swagger with spring boot works when built on some machines, but not others 【发布时间】:2018-05-07 13:09:46 【问题描述】:当我在我的机器(Linux、Ubuntu 14、Oracle JDK1.8、Maven 3.5.2)上使用 swagger 构建 Spring Boot 应用程序时,它可以正常运行 swagger 文档。
如果在 Windows 机器上构建,swagger-ui 也可以正常工作。
当我在我们的 Jenkins Build 机器上大摇大摆地构建 Spring Boot 应用程序时。 (Linux, Ubuntu 16, Oracle JDK1.8, Maven 3.5.2) 应用运行正常,但是swagger在swagger-ui,html页面给出404:
14:01:28.296 [http-nio-30020-exec-1] WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/api/v2/swagger-ui.html] in DispatcherServlet with name 'dispatcherServlet'
这通过 jenkins 和在命令行上运行的 mvn clean install
发生。
我想不出 Jenkins 机器会以不同方式构建它的任何原因,但它似乎是!有什么明显的我错过了吗?我看到其他人有文档是否出现的问题,但我没有看到它在选择机器上构建时工作。
[编辑] 进一步测试表明,在 Ubuntu 14(32 位或 64 位)上全新安装可以正常工作,而在不同的 Ubuntu16 64 位机器上全新安装 java/maven 则无法正常工作。
它也适用于全新的 Ubuntu17 安装,但不适用于全新的 Ubuntu16 安装,具有相同的 maven.tar.gz 和 jdk.tar.gz 安装。
如果您解压缩并比较内容,生成的 jar 文件似乎是相同的。但是,如果您将无法使用的文件重新压缩到一个新的 jar 中,您可以获得一个可以使用的。
jar 文件之间的唯一区别是运行unzip -l .jar
时返回的文件的顺序。
所以看起来文件添加到 jar 中的顺序很关键。
【问题讨论】:
jenkins box 构建不同的东西可能有很多原因,即不同的环境变量、不同的 Maven 设置、不同的 Maven 配置文件。如果可能,请从 jenkins 框中获取mvn help:effective-pom
并将其与您机器中的一个进行比较。可以通过将-X
添加到您的 maven 命令行并比较(使用一些差异工具)在两种环境中捕获的输出来完成相同的操作。
您的访问方式:http://mvn spring-boot:run
?如果詹金斯不运行它,你如何运行该构建来测试它?你会下载 jar/war 并运行它吗?
【参考方案1】:
在我的用户帐户下构建应用程序并在 root (sudo) 下启动它时,我遇到了同样的问题。 sudo mvn spring-boot:run
解决了这个问题。
【讨论】:
【参考方案2】:我假设您有以下两个依赖项:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>$springfox.version</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>$springfox.version</version>
</dependency>
使用 jenkins 或 mvn clean package 构建我的 swagger 应用程序没有问题
【讨论】:
是的,在 POM 中。它在新的 Ubuntu14 机器上构建良好,只是在 Ubuntu16 机器上构建时出现 404 错误。以上是关于在某些机器上构建时,带有弹簧靴的 Swagger 可以工作,但在其他机器上则不行的主要内容,如果未能解决你的问题,请参考以下文章