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

时间:2018-06-01 04:26:23

标签: java spring-boot jenkins gradle build

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

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

本地工作正常,包括构建,测试和webapp与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任务的内容是什么。我认为这项任务来自詹金斯。

在使用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插件禁用了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文件。不确定是什么让詹金斯寻找workspace-0.2.1-SNAPSHOT.jar。它应该是my-project,因为我在bootJar任务中定义了baseName。

知道这里有什么问题吗?感谢。

2 个答案:

答案 0 :(得分:2)

除非您明确定义项目名称,否则Gradle将使用目录名作为项目名称。在Jenkins上,项目目录称为“workspace”。 artifactoryPublish可能是使用项目名称来确定要发布的JAR文件的名称。如果是这样的话,这不是好习惯。

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

rootProject.name = "my-project"

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

答案 1 :(得分:0)

我想扩展Peter的答案,Gradle的作者建议我们应该使用settings.gradle

在设置文件中定义根项目名称:“ rootProject.name”有效地为整个构建分配名称,该名称用于构建扫描等报告中。如果未设置根项目名称,则该名称将是容器目录名称,该名称可能不稳定(即您可以将项目检出到任何目录)。