java - 使用 gradle bootJar 而不是 jar 任务并且在 Jenkins 中构建失败

标签 java spring-boot jenkins gradle build

在我的 gradle.build 文件中开始使用 spring boot gradle 插件后,在 jenkins 上构建失败。

classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE")

本地一切正常,包括构建、测试和 Web 应用程序在 Jetty 上运行良好。唯一的问题是在任务 artifactoryPublish 中 Jenkins 的构建失败。它说:

File '/var/lib/jenkins/jobs/release-my-project/workspace/build/libs/workspace-0.2.1-SNAPSHOT.jar' does not exists, and need to be published!

不确定 gradle artifactoryPublish 任务发生了什么。我认为任务来自 Jenkins。

在使用spring boot gradle插件之前,我在gradle.build中的jar任务如下:

jar {
    baseName = 'my-project'
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
        configurations.runtime.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    manifest {
        attributes 'Main-Class':'com.example.Application'
    }
    // Exclude manifest signature files
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/LICENSE'
}   

由于spring boot gradle plugin禁用了jar任务,取而代之的是bootJar任务,所以我配置bootjar任务如下:

bootJar {
    baseName = 'my-project'
    mainClassName = 'com.example.Application'
    // Exclude manifest signature files
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/LICENSE'
}

我从 jenkins 日志中注意到的一件事是它说文件 workspace-0.2.1-SNAPSHOT.jar 不存在。好像它正在寻找错误的文件。以前,它查找正确的文件 my-project-0.2.1-SNAPSHOT.jar。当我在本地构建时,创建了这个 jar 文件。不确定是什么让 jenkins 寻找 workspace-0.2.1-SNAPSHOT.jar。它应该是 my-project,因为我在 bootJar 任务中定义了 baseName。

知道这里出了什么问题吗?谢谢。

最佳答案

除非您明确定义项目名称,否则 Gradle 将使用目录名称作为项目名称。在 Jenkins 上,项目目录称为“工作区”。 artifactoryPublish 大概是使用项目名称来确定要发布的 JAR 文件的名称。如果是这样的话,那不是好的做法。

无论如何,您确实应该设置项目的名称。然后,您不必在 Jar 任务上显式设置 baseName。只需在项目的根目录中添加一个 settings.gradle 文件,即在 build.gradle 文件旁边,并将其内容设置为:

rootProject.name = "my-project"

这应该有望解决问题,尽管它实际上取决于 artifactoryPublish 任务正在做什么。

关于java - 使用 gradle bootJar 而不是 jar 任务并且在 Jenkins 中构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636093/

相关文章:

用于非常大的数字的快速乘法的 Java 库

java - 为什么 TableView 不显示从其他列计算值的列值?请给我建议一些解决方案

linux - Angular/Jasmine : $httpBackend. expectGET 适用于 Mac,不适用于 Linux

git - 在 Jenkins 管道作业上访问 SCM (Git) 变量

java - 使用 NetBeans 和 Maven 进行增量构建以进行 jetty 热部署

java - 从 Java 泛型 T[] 写入 DataOutput 流?

java - @jsonRootName 不适用于 Spring Boot 启动器 hatoas

java - spring boot重启时如何防止db初始化

spring-boot - 如何在 spring-boot 中为 ANSI 颜色功能配置 logback?

jenkins - Jenkins Pipeline访问环境变量