Search code examples
javaspringmavengradlesonarqube

Failing to get dependency during SonarScan action


In our Java SpringBoot project we are using GitHub actions to run SonarScan. It was working like a charm until I've added first custom library to the project. That library is in Nexus repo and accessible only via VPN.

Locally project is built without any issues and works fine. Unit-testing and dev deployment GH actions run successfully. But SonarScan action is failing on :compileJava because of the missing resource (log below).

Looks like it tries to get it from the Apache Maven although it is in the Nexus. Here is the relevant part of the log:

> Task :compileJava
Watching 37 directories to track changes
Resolving global dependency management for project 'project_name'
Resource missing. [HTTP GET: https://repo.maven.apache.org/maven2/com/company_name/lib_name/1.0.7-SNAPSHOT/maven-metadata.xml]
Resource missing. [HTTP GET: https://repo.maven.apache.org/maven2/com/company_name/lib_name/1.0.7-SNAPSHOT/lib_name-1.0.7-SNAPSHOT.pom]
Excluding []


FAILURE: Build failed with an exception.
> Task :compileJava FAILED
* What went wrong:
:compileJava (Thread[included builds,5,main]) completed. Took 4 mins 35.418 secs.
1 actionable task: 1 executed
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
   > Could not resolve com.company_name:lib_name:1.0.7-SNAPSHOT.

     Required by:
         project :
      > Skipped due to earlier error

Here is our build.gradle file (shortened):

plugins {
    id 'org.springframework.boot' version '2.6.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'java-library'
    id "org.sonarqube" version "3.3"
}


//Sets Java Version
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

ext {
    set('mongoVersion', '4.4.1')
    set('mavenUsername', "maven.user")
    set('mavenPassword', "password")
    set('mavenUrl', "https://nexus-repo-url/repository/repo-name")
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
    maven {
        credentials {
            username "${mavenUsername}"
            password "${mavenPassword}"
        }
        url "${mavenUrl}"
        authentication {
            basic(BasicAuthentication)
        }
    }
}

dependencies {
    ...
    implementation "com.company_name:lib_name:1.0.7-SNAPSHOT"
}


sonarqube {
    properties {
        property "sonar.projectKey", "prject_key"
        property "sonar.java.binaries", "build/classes"
    }
}

I am obviously missing some path somewhere, but failing to find where actually.


Solution

  • Solved. Issue was related to the VPN and got fixed in .github/workflows/sonar.yml:

    name: SonarScan
    on:
      pull_request:
      push:
        branches:
          - main # or the name of your main branch
    
    jobs:
      build:
        name: SonarScan
        runs-on: ubuntu-latest <-- should be [self-hosted, main] to pass the wall
        steps:
          ...