【发布时间】: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 并运行它吗?
标签: java maven spring-boot jenkins swagger-ui