在某些机器上构建时,带有弹簧靴的 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://://swagger-ui.html ?? @diginoise 有效的 poms 是相同的(时间戳除外)我现在正在研究 -X。 @diginoise Maven -X 显示除了 linux 内核版本之外没有任何差异,但是将文件添加到 jar、创建 .class 文件和运行 junit 测试的顺序非常不同。覆盖 jar 中的某些内容可能是排序问题? junit,无论如何都应该混合顺序(或者我认为)只是为了确保没有测试间依赖关系。 Jenkins 是如何运行应用程序的? 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 可以工作,但在其他机器上则不行的主要内容,如果未能解决你的问题,请参考以下文章

带有弹簧靴的百里香叶缓存

带有弹簧靴的keycloak openid单次注销

如何通过带有弹簧靴的邮递员操作数据

使用的表型弹簧靴的最大行数。

带弹簧靴的执行器

用于弹簧靴的 CORS 过滤器不起作用