Asendo
Asendo

Reputation: 158

Azure Pipeline Gradle build fails for Spring

Im trying to build and deploy a Spring API on Azure via a Yaml pipeline. But i get an error during the spring application gradle build saying.

Error: /home/vsts/work/1/s/gradlew failed with return code: 1

Could not find org.springframework.boot:spring-data-rest-hal-browser:

Expanding the Error,

Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':compileClasspath'.
> Could not find org.springframework.boot:spring-data-rest-hal-browser:.
  Required by:
      project :

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 39s
1 actionable task: 1 executed
Error: /home/vsts/work/1/s/gradlew failed with return code: 1
    at ChildProcess.<anonymous> (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/2.151.0/node_modules/vsts-task-lib/toolrunner.js:639:25)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:886:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
##[error]Error: /home/vsts/work/1/s/gradlew failed with return code: 1
##[section]Finishing: Gradle

Things i have tried.

I have tried changing specifying the versions of spring-data-rest-hal-browser in my project from. compile("org.springframework.boot:spring-data-rest-hal-browser") to compile("org.springframework.boot:spring-data-rest-hal-browser:2.4.0.RELEASE") and finally compile("org.springframework.boot:spring-data-rest-hal-browser:3.0.8.RELEASE")

But still the same Error results

This is my current build.gradle file in my repo

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test.spring.api'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.11'

repositories {
    mavenCentral()
}

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-rest'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly("org.springframework.boot:spring-boot-devtools")

    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-data-rest-hal-browser")
    compile("org.springframework.data:spring-data-rest-webmvc:3.1.5.RELEASE")
}

And this is my current azure-pipelines.yml file

# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/java

trigger:
- master

pool:
  vmImage: 'Ubuntu-16.04'

steps:
- task: Gradle@2
  inputs:
    workingDirectory: '$(system.defaultWorkingDirectory)'
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: false
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'build'

- task: CopyFiles@2
  displayName: 'Copy Files to: Wireframe Directory on development server'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'

    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- script: 
      cd '$(Build.ArtifactStagingDirectory)';
      ls

- task: FtpUpload@1
  displayName: 'FTP Upload: $(Build.ArtifactStagingDirectory)'
  inputs:
    credentialsOption: inputs

    serverUrl: '[test server url]'

    username: '[test username] '

    password: '[test password] '

    rootDirectory: '$(Build.ArtifactStagingDirectory)'

    remoteDirectory: D:\home\site\wwwroot\webapps\ROOT\

    preservePaths: true

I want to be able to automatically deploy my spring application to the server URL by pushing my code to it via the Azure devops pipeline which would build and deploy the spring application.

Thanks

Upvotes: 2

Views: 5470

Answers (1)

Asendo
Asendo

Reputation: 158

So i resolved the issue by making some changes to the build.gradle file and build pipeline using help from the Microsoft Azure Repository for Intellij on Github: see here

My new build.gradle file looks like this:

plugins {
    id 'org.jetbrains.intellij' version '0.4.1' apply false
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

/**
 *This is task for update Gradle wrapper version.
 */
task wrapper(type: Wrapper) {
    gradleVersion = '4.7'
    distributionUrl = "https://services.gradle.org/distributions/gradle-${gradleVersion}-all.zip"
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test.spring.api'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

allprojects {

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

    repositories {
        mavenCentral()
    }
}

task unitTest(type: Test) {
    exclude '**/ApplicationTests/**'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-rest'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly("org.springframework.boot:spring-boot-devtools")

    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile group: 'org.springframework.data', name: 'spring-data-rest-hal-browser', version: '3.0.8.RELEASE'
    compile("org.springframework.data:spring-data-rest-webmvc:3.1.5.RELEASE")
}

    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }

    tasks.withType(FindBugs) {
        ignoreFailures = true
        reports {
            html { enabled = true }
            xml.enabled = !html.enabled
        }
    }

    /**
     * Preparing for release build
     */
    task prepRelease() {
    }

Also modified the azure-pipelines.yml file to include stacktrace and info to assist in debugging other gradle and build errors.

 tasks: 'build --stacktrace --info'

Upvotes: 2

Related Questions