Git Product home page Git Product logo

cyclonedx-gradle-plugin's Introduction

Build Status Gradle Plugin License Website Slack Invite Group Discussion Twitter

CycloneDX Gradle Plugin

The CycloneDX Gradle plugin creates an aggregate of all direct and transitive dependencies of a project and creates a valid CycloneDX SBOM. CycloneDX is a lightweight software bill of materials (SBOM) specification designed for use in application security contexts and supply chain component analysis.

Usage

Execution:

gradle cyclonedxBom

Output CycloneDX Generation Info:

gradle cyclonedxBom -info

build.gradle (excerpt)

To generate BOM for a single project add the plugin to the build.gradle.

plugins {
    id 'org.cyclonedx.bom' version '1.8.2'
}

Once a BOM is generated, by default it will reside at ./build/reports/bom.xml and ./build/reports/bom.json

Configuration:

You can add the following configuration to build.gradle to control various options in generating a BOM:

cyclonedxBom {
    // includeConfigs is the list of configuration names to include when generating the BOM (leave empty to include every configuration), regex is supported
    includeConfigs = ["runtimeClasspath"]
    // skipConfigs is a list of configuration names to exclude when generating the BOM, regex is supported
    skipConfigs = ["compileClasspath", "testCompileClasspath"]
    // skipProjects is a list of project names to exclude when generating the BOM
    skipProjects = [rootProject.name, "yourTestSubProject"]
    // Specified the type of project being built. Defaults to 'library'
    projectType = "application"
    // Specified the version of the CycloneDX specification to use. Defaults to '1.5'
    schemaVersion = "1.5"
    // Boms destination directory. Defaults to 'build/reports'
    destination = file("build/reports")
    // The file name for the generated BOMs (before the file format suffix). Defaults to 'bom'
    outputName = "bom"
    // The file format generated, can be xml, json or all for generating both. Defaults to 'all'
    outputFormat = "json"
    // Exclude BOM Serial Number. Defaults to 'true'
    includeBomSerialNumber = false
    // Exclude License Text. Defaults to 'true'
    includeLicenseText = false
    // Override component version. Defaults to the project version
    componentVersion = "2.0.0"
}

If you are using the Kotlin DSL, the plugin can be configured as following:

tasks.cyclonedxBom {
    setIncludeConfigs(listOf("runtimeClasspath"))
    setSkipConfigs(listOf("compileClasspath", "testCompileClasspath"))
    setSkipProjects(listOf(rootProject.name, "yourTestSubProject"))
    setProjectType("application")
    setSchemaVersion("1.5")
    setDestination(project.file("build/reports"))
    setOutputName("bom")
    setOutputFormat("json")
    setIncludeBomSerialNumber(false)
    setIncludeLicenseText(true)
    setComponentVersion("2.0.0")
}

Run Gradle with info logging (-i option) to see which configurations add to the BOM.

Generate BOM for multiple projects:

You can also build the BOM for multiple projects using the --init-script option:

gradle --init-script <path-to-init.gradle> cyclonedxBom -info

where the init.gradle can look like this:

initscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "org.cyclonedx:cyclonedx-gradle-plugin:1.8.2"
  }
}

allprojects{
  apply plugin:org.cyclonedx.gradle.CycloneDxPlugin
  cyclonedxBom {
    includeConfigs = ["runtimeClasspath"]
    skipConfigs = ["compileClasspath", "testCompileClasspath"]
    skipProjects = [rootProject.name, "yourTestSubProject"]
    projectType = "application"
    schemaVersion = "1.5"
    destination = file("build/reports")
    outputName = "bom"
    outputFormat = "json"
    includeBomSerialNumber = false
    includeLicenseText = true
    componentVersion = "2.0.0"
  }
}

How to manually modify Metadata

The Plugin makes it possible to manually add Manufacture-Data and Licenses-Data to the Metadata of the BOM.
The structure of the Metadata is shown on https://cyclonedx.org/docs/1.5/json/#metadata.
The editing of the Manufacture and Licenses-Data is optional. If the Manufacture/Licenses-Date isn't edited, then the respective structure won't appear in the BOM.

To enable the modification of the metadata the cyclonedx-core-java plugin must be implemented in the build.gradle.


Adding Manufacture-Data

In order to be able to define the Manufacture-Data you must import org.cyclonedx.model.*; into the build.gradle.
You can add the Manufacture-Data by passing an Object of the Type OrganizationalEntity to the Plugin.

Example (groovy):

cyclonedxBom {
    //declaration of the Object from OrganizationalContact
    OrganizationalContact organizationalContact = new OrganizationalContact()
    //setting the Name[String], Email[String] and Phone[String] of the Object
    organizationalContact.setName("Max_Mustermann")
    organizationalContact.setEmail("[email protected]")
    organizationalContact.setPhone("0000 99999999")
    //passing Data to the plugin
    organizationalEntity {oe->
        oe.name = 'Test'
        oe.url = ['www.test1.com', 'www.test2.com']
        oe.addContact(organizationalContact)
    }
}

Example (Kotlin):

cyclonedxBom {
    //declaration of the Object from OrganizationalContact
    var organizationalContact1 = OrganizationalContact()
    //setting the Name[String], Email[String] and Phone[String] of the Object
    organizationalContact1.setName("Max_Mustermann")
    organizationalContact1.setEmail("[email protected]")
    organizationalContact1.setPhone("0000 99999999")
    //passing Data to the plugin
    setOrganizationalEntity{oe->
        oe.name = "Test";
        oe.urls = listOf("www.test1.com", "www.test2.com")
        oe.addContact(organizationalContact1)
    }
}

It should be noted that some Data like OrganizationalContact, Url, Name,... can be left out.
OrganizationalEntity can also include multiple OrganizationalContact.

For details look at https://cyclonedx.org/docs/1.5/json/#metadata.

Adding Licenses-Data

In order to be able to define the Manufacture-Data you must import org.cyclonedx.model.*; into the build.gradle.

You can add the Licenses-Data by passing an Object of the Type LicenseChoice to the Plugin. The Object from LicenseChoice includes either License or Expression. It can't include both.

License

Example (groovy):

cyclonedxBom {
    //declaration of the Object from AttachmentText -> Needed for the setting of LicenseText
    AttachmentText attachmentText = new AttachmentText()
    attachmentText.setText("This is a Licenses-Test")
    //declaration of the Object from License
    License license = new License()
    //setting the Name[String], LicenseText[AttachmentText] and Url[String]
    license.setName("XXXX XXXX Software")
    //license.setId("Mup")     // either id or name -> both not possible
    license.setLicenseText(attachmentText);
    license.setUrl("https://www.test-Url.org/")
    //passing Data to Plugin
    licenseChoice {lc->
        lc.addLicense(license)
    }
}

Example (Kotlin):

cyclonedxBom {
    //declaration of the Object from AttachmentText -> Needed for the setting of LicenseText
    val attachmentText = AttachmentText()
    attachmentText.setText("This is a Licenses-Test")
    //declaration of the Object from License
    val license = License()
    //setting the Name[String], LicenseText[AttachmentText] and Url[String]
    license.setName("XXXX XXXX Software")
    //license.setId("Mup")     // either id or name -> both not possible
    license.setLicenseText(attachmentText)
    license.setUrl("https://www.test-Url.org/")
    //passing Data to Plugin
    setLicenseChoice{lc->
        lc.addLicense(license)
    }
}

It should be noted that License requires either Id or Name, but both can't be included at the same time.

Text and Url are optional for inclusion and multiple License can be added to LicenseChoice.


Expression

Example (groovy):

cyclonedxBom {
    //passing Expression to Plugin
    licenseChoice {lc->
        lc.setExpression("This is a Test Expression")
    }
}

Example (Kotlin):

cyclonedxBom {
    //passing Expression to Plugin
    setLicenseChoice{lc->
        lc.setExpression("This is a Test Expression")
    }
}

For details of the BOM structure look at https://cyclonedx.org/docs/1.5/json/#metadata.

CycloneDX Schema Support

The following table provides information on the version of this Gradle plugin, the CycloneDX schema version supported, as well as the output format options. Use the latest possible version of this plugin that is the compatible with the CycloneDX version supported by the target system.

Version Schema Version Format(s)
1.8.x CycloneDX v1.5 XML/JSON
1.7.x CycloneDX v1.4 XML/JSON
1.6.x CycloneDX v1.4 XML/JSON
1.5.x CycloneDX v1.3 XML/JSON
1.4.x CycloneDX v1.3 XML/JSON
1.2.x CycloneDX v1.2 XML/JSON
1.1.x CycloneDX v1.1 XML
1.0x CycloneDX v1.0 XML

Copyright & License

CycloneDX Gradle Plugin is Copyright (c) OWASP Foundation. All Rights Reserved.

Permission to modify and redistribute is granted under the terms of the Apache 2.0 license. See the LICENSE file for the full license.

cyclonedx-gradle-plugin's People

Contributors

adam-siklosi avatar angrylogic avatar behnazh-w avatar bert-r avatar dependabot-preview[bot] avatar dependabot[bot] avatar emirmx avatar fanovilla avatar fgunbin avatar flashfishgit avatar gcx-seb avatar gitphill avatar glefloch avatar gradle-update-robot avatar jskov-jyskebank-dk avatar k3rnelpan1c-dev avatar kkristof93 avatar lislei avatar llamahunter avatar loicrouchon avatar officernordberg avatar pjfanning avatar s-callier avatar skhokhlov avatar sschuberth avatar stefanneuhaus avatar stevespringett avatar thomasvitale avatar thomgeg avatar zkstchhh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cyclonedx-gradle-plugin's Issues

Generation of 1.0 schema BOM fails

When a 1.0 BOM is generated, it is validated against the 1.1 schema, and validation fails, causing the build to fail.

Example output:

$ ../gradlew cycloneDxBom -Pcyclonedx.schemaVersion=1.0 -i
...
CycloneDX: Creating BOM
CycloneDX: Writing BOM
CycloneDX: Validating BOM

> Task :web:cyclonedxBom FAILED
:web:cyclonedxBom (Thread[Daemon worker Thread 4,5,main]) completed. Took 3.792 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':web:cyclonedxBom'.
> The BOM does not conform to the CycloneDX BOM standard as defined by the XSD

* Try:
Run with --stacktrace option to get the stack trace. Run with --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 4s
1 actionable task: 1 executed

Example gradle

Hi Steve,

I followed the build.gradle at "cyclonedx-gradle-plugin/src/test/build.gradle" and was not able to run "gradlew cyclonedxBom".
After some analysis I found following workaround and could create bom.xml.
So if someone encounters same problem, this can be used.

build.gradle:

plugins {
    id 'org.cyclonedx.bom' version '1.0.0-SNAPSHOT' apply true
}

apply plugin: "java"
apply plugin: "maven"

repositories {
...
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
	compile group: "...", name: "...", version: "..."
}

settings.gradle:

pluginManagement {
	resolutionStrategy {
		eachPlugin {			
			if (requested.id.toString() == 'org.cyclonedx.bom') {
				useModule('org.cyclonedx:cyclonedx-gradle-plugin:1.0.0-SNAPSHOT')
			}
		}
	}
	repositories {
		maven {
			url 'https://oss.sonatype.org/content/repositories/snapshots'
		}
		maven {
			url '...'
			credentials {
				username "..."
				password "..."
			}
		}
	}
}

Important: only gradle versions 4.10+ supports plugins from snapshot repo.

Gradle can't resolve the 1.1.4 Version

When using this in my settings.gradle file:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.toString() == 'org.cyclonedx.bom') {
                useModule('org.cyclonedx:cyclonedx-gradle-plugin:1.1.4')
            }
        }
    }
    repositories {
        mavenCentral()
    }
}

I get this error:

* What went wrong:
Plugin [id: 'org.cyclonedx.bom', artifact: 'org.cyclonedx:cyclonedx-gradle-plugin:1.1.4'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'org.cyclonedx:cyclonedx->gradle-plugin:1.1.4')
Searched in the following repositories:
MavenRepo

However, setting the version to 1.1.3 in the settings.gradle file works without any problems.

Resolving configuration 'generatedImplementation' directly is not allowed

cyclonedxBom task runs but eventually fails with error "Resolving configuration 'generatedImplementation' directly is not allowed". Also seeing many "Unable to resolve POM for..." errors

Task :cyclonedxBom FAILED
:cyclonedxBom (Thread[Daemon worker,5,main]) completed. Took 1 mins 58.585 secs.

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':cyclonedxBom'.

Resolving configuration 'generatedImplementation' directly is not allowed

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

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

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2m 5s
1 actionable task: 1 executed

Android - skipConfigs & projectType configuration not working

Usage on README.md specify :
Configuration: You can control the configurations included in the BOM:

cyclonedxBom {
    // skipConfigs is a list of configuration names to exclude when generating the BOM
    skipConfigs += ["compileClasspath", "testCompileClasspath"]
    // Specified the type of project being built. Defaults to 'library' 
    projectType = "application"
    // Specified the version of the CycloneDX specification to use. Defaults to 1.2.
    schemaVersion = "1.2"
}

I use the "skipConfigs" property to exclude some tests configuration which are in error but execution continue failing using the excluded configuration.

Moreover, "projectType" can't be set because this property is private and there is no setter allowed.

Has anyone had the same problem and could help

Problem with XMLWriter

We are trying to generate BOMs for our Android projects and I am having a hell of a time. After finally figuring out all configs that I have to skip (still not sure why though...), the plugin seems to run but dies when trying to write the BOM with no real information:

Task :cyclonedxBom FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':cyclonedxBom'.

An error occurred executing org.cyclonedx.gradle.CycloneDxTask_Decorated

Running the task with '--stacktrace' give me a little more information, but I have no clue how to fix this, or if it is even something I can fix on my side (I'm not really familiar with Gradle, more of a Maven-man myself, but am tasked with generating the BOMs):

----- snipped a large part of the stacktrace -----

Caused by: org.cyclonedx.exception.GeneratorException: com.fasterxml.jackson.core.JsonGenerationException: Underlying Stax XMLStreamWriter (of type shadow.nexus.shadow.com.ctc.wstx.sw.RepairingNsStreamWriter) does not implement Stax2 API natively and is missing method 'writeRaw': this breaks functionality such as indentation that relies on it. You need to upgrade to using compliant Stax implementation like Woodstox or Aalto

Can I fix this myself, or is this something in the plugin (dependency?) or can I somehow configure this in eg my build.gradle?

Provide plugin in Gradle Plugin Portal

Having the plugin available in the Gradle Plugin Portal allows for the applying the plugin using the plugins DSL. If possible, this is often the preferred way.

If not required, having the plugin's build use Gradle is probably the most obvious way. This also comes with other benefits like support for easily testing the plugin during the build.

ConcurrentModificationException with Quarkus applications

With Quarkus applications (specifically using Quarkus 2.3+), a ConcurrentModificationException occurs when trying to run the Cyclonedx plugin.

Stacktrace:

Caused by: java.util.ConcurrentModificationException
        at org.gradle.api.internal.DefaultDomainObjectCollection$IteratorImpl.next(DefaultDomainObjectCollection.java:475)
        at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:174)

Reproduce

  1. Clone https://github.com/mweber03/quarkus-test
  2. Run ./gradlew service1:cyclonedxBom

dependencies with ISO-8859-1 encoding of their POM are skipped

When I use the plugin on the following gradle project

plugins {
    id 'org.cyclonedx.bom' version '1.4.1'
    id 'com.github.johnrengelman.shadow' version '7.1.2'
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation "org.junit.platform:junit-platform-runner:1.8.2"
}

I get the message

An error occurred attempting to read POM
org.codehaus.plexus.util.xml.pull.XmlPullParserException: UTF-8 BOM plus xml decl of ISO-8859-1 is incompatible (position: START_DOCUMENT seen <?xml version="1.0" encoding="ISO-8859-1"... @1:41) 
	at org.codehaus.plexus.util.xml.pull.MXParser.parseXmlDeclWithVersion(MXParser.java:3366)
	at org.codehaus.plexus.util.xml.pull.MXParser.parseXmlDecl(MXParser.java:3288)
	at org.codehaus.plexus.util.xml.pull.MXParser.parsePI(MXParser.java:3140)
	at org.codehaus.plexus.util.xml.pull.MXParser.parseProlog(MXParser.java:1828)
	at org.codehaus.plexus.util.xml.pull.MXParser.nextImpl(MXParser.java:1757)
	at org.codehaus.plexus.util.xml.pull.MXParser.next(MXParser.java:1375)
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3856)
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595)
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609)
	at org.cyclonedx.gradle.MavenHelper.readPom(MavenHelper.java:298)
	at org.cyclonedx.gradle.MavenHelper.readPom(MavenHelper.java:285)
	at org.cyclonedx.gradle.CycloneDxTask.getResolvedMavenProject(CycloneDxTask.java:222)
	at org.cyclonedx.gradle.CycloneDxTask.augmentComponentMetadata(CycloneDxTask.java:234)
	at org.cyclonedx.gradle.CycloneDxTask.lambda$null$3(CycloneDxTask.java:167)
	at java.base@17/java.lang.Iterable.forEach(Iterable.java:75)
	at org.cyclonedx.gradle.CycloneDxTask.lambda$createBom$4(CycloneDxTask.java:156)
	at java.base@17/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
	at java.base@17/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base@17/java.util.Iterator.forEachRemaining(Iterator.java:133)
	at java.base@17/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
	at java.base@17/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base@17/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base@17/java.util.TreeMap$KeySpliterator.forEachRemaining(TreeMap.java:3064)
	at java.base@17/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base@17/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base@17/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base@17/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base@17/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:174)
	at java.base@17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base@17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@17/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:502)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:487)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:470)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:106)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:249)
	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:58)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:39)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:180)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:75)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:46)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:105)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:98)
	at java.base@17/java.util.Optional.map(Optional.java:260)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:53)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:37)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:85)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:42)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:92)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:73)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:92)
	at java.base@17/java.util.Optional.orElseGet(Optional.java:364)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:92)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:33)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:284)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:185)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:174)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.base@17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base@17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
	at java.base@17/java.lang.Thread.run(Thread.java:833)
08:08:08: Execution finished 'cyclonedxBom'.

How does this plugin work?

Hi,

In the README, the instructions are "TODO", and in the code, I see a comment that says "This code does not currently work. TESTING ONLY".

I know very little about Gradle, so I can't help code this plugin, but if you can provide input on how to run it, I can help test.

Thanks.

BOM generation does not honor overridden dependency versions

Gradle allows you to specify a version of a transitive dependency if, for example, you need to use a newer version due to a 3rd party vulnerability. However, the generated BOM does not reflect the overridden version.

Here is a complete example:

build.gradle

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}
plugins {
    id 'java'
    id 'maven-publish'
    id 'org.cyclonedx.bom' version "1.2.0"
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile("com.amazonaws:amazon-sqs-java-messaging-lib:1.0.8") {
        // the amazonaws lib depends on httpclient 4.5.2 which has a vulnerability, 
        // override it to depend on version 4.5.13 which doesn't have vulnerabilities.
        implementation("org.apache.httpcomponents:httpclient:4.5.13") {
            because "Older versions have CVEs"
        }
    }
}

publishing {
    publications {
        example(MavenPublication) {
            from components.java
        }
    }
}

settings.gradle

rootProject.name = 'example'

To demonstrate, if I run ./gradlew dependencies, it shows that the transitive dependency version has been overridden with the desired version (as expected):

...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- com.amazonaws:amazon-sqs-java-messaging-lib:1.0.8
|    +--- com.amazonaws:aws-java-sdk-sqs:1.11.106
|    |    +--- com.amazonaws:aws-java-sdk-core:1.11.106
|    |    |    +--- commons-logging:commons-logging:1.1.3 -> 1.2
|    |    |    +--- org.apache.httpcomponents:httpclient:4.5.2 -> 4.5.13
...

Furthermore, the build/publications/example/pom-default.xml that's generated by running ./gradlew generatePomFileForExamplePublication also shows the overridden version (as expected):

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!-- This module was also published with a richer model, Gradle metadata,  -->
  <!-- which should be used instead. Do not delete the following line which  -->
  <!-- is to indicate to Gradle or any Gradle module metadata file consumer  -->
  <!-- that they should prefer consuming it instead. -->
  <!-- do_not_remove: published-with-gradle-metadata -->
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>amazon-sqs-java-messaging-lib</artifactId>
      <version>1.0.8</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.13</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>

(Note that Maven dependency resolution uses the "nearest first" strategy while Gradle selects the highest version, so in any case, the desired overridden version will be used instead of the old vulnerable one.)

However, the build/reports/bom.xml generated by ./gradlew cyclonedxBom shows the wrong version (unexpected behavior):

<component type="library">
    <group>org.apache.httpcomponents</group>
    <name>httpclient</name>
    <version>4.5.2</version>
    <description><![CDATA[Apache HttpComponents Client]]></description>
    <scope>required</scope>
    <hashes>
        <hash alg="MD5">e0a45df625cb96b69505e59bb25a0189</hash>
        <hash alg="SHA-1">733db77aa8d9b2d68015189df76ab06304406e50</hash>
        <hash alg="SHA-256">0dffc621400d6c632f55787d996b8aeca36b30746a716e079a985f24d8074057</hash>
        <hash alg="SHA-384">6fc7880af7c7f91cdfc81e8c47f84b92c4bc4379ae6c4148be0ece4b14badf48d255093ac6bfa20eb38a612496eca104</hash>
        <hash alg="SHA-512">c75a4027ca5fe08a1d2b5ac1f632df2fa6d18725dcd45735ac021e19ba24f0438b53f34ee72282f5895a25d3493499bb60d03ccc215797413ca8613ac0918431</hash>
    </hashes>
    <purl>pkg:maven/org.apache.httpcomponents/[email protected]?type=jar</purl>
</component>

I believe this is a bug in the CycloneDx Gradle plugin, and that the BOM should reflect the overridden version.

Why do some packages don't have the <licenses> tag?

I've scanned some projects and many of the libraries don't have a license reference in the bom.xml.
For example:

<component type="library">
            <group>com.pinterest.ktlint</group>
            <name>ktlint-core</name>
            <version>0.34.2</version>
            <scope>required</scope>
            <hashes>
                <hash alg="MD5">b3632c7ad1a9f0ac00e9a452950ef6c3</hash>
                <hash alg="SHA-1">44425886cd1ba4a665a4915e5be1513b287d5905</hash>
                <hash alg="SHA-256">d2621a6cb952ae6d3c1b5aae8916131be20a684d478f94aa94ed752447cb76b5</hash>
                <hash alg="SHA-384">1d6e6b8d02f8358890a62d948e45d93b20d83607a068ac32f3654fa3a966bbe6be3c9b834c20d6cf7e35b67b5f52c9fc</hash>
                <hash alg="SHA-512">d53e561c2bf22d923b72d4e4dbaf85526105f9143b663d54a715063a18e71b104ad48a48dbd667fd3b23d598545e4435b9d50a6b085dc9c36f1521add12ed1e6</hash>
            </hashes>
            <purl>pkg:maven/com.pinterest.ktlint/[email protected]?type=jar</purl>
</component>

Uses the MIT Licese according to its Maven repository. And for example:

<component type="library">
            <group>org.jetbrains.kotlin</group>
            <name>kotlin-compiler-embeddable</name>
            <version>1.3.41</version>
            <description>Kotlin Compiler (embeddable)</description>
            <scope>required</scope>
            <hashes>
                <hash alg="MD5">9b2e24c9da4bea1b7c5eb73db4edc121</hash>
                <hash alg="SHA-1">6b1d4385d65894e07a0d14a5949f5417a408f0b7</hash>
                <hash alg="SHA-256">ea6ab03286a534ab24f123b845a107c7a53b679f6ee56bdc34b5dd1b0fd7b6f4</hash>
                <hash alg="SHA-384">7e948d4047f668064df3e64c1ec7a8fd726143ad31f2feedaa6654021814d756e4a28cb18a2138d3c2929fab310c4e52</hash>
                <hash alg="SHA-512">f8be53fa52f6da86305fd0fbf92a72342c788a5972bc2f602eba2c1b2984b2bfe2b2c82f07234f2358654d557becaec8c030b437e412292459259a4429951b22</hash>
            </hashes>
            <purl>pkg:maven/org.jetbrains.kotlin/[email protected]?type=jar</purl>
</component>

Uses the Apache 2.0 Licese according to its Maven repository.

metadata does not get templated

Using version 1.5.0 of this plugin, the metadata element of the generated sbom file always looks like this:

  "metadata" : {
    "timestamp" : "2022-03-28T18:16:01Z",
    "tools" : [
      {
        "vendor" : "${project.organization.name}",
        "name" : "${project.name}",
        "version" : "${project.version}"
      }
    ],

According to the source code, these attributes should be read from https://github.com/CycloneDX/cyclonedx-gradle-plugin/blob/master/src/main/resources/plugin.properties, but this template file doesn't seem to be rendered correctly.

lots of errors when running, tho does produce bom.xml

It produces about 20 lines like

Unable to resolve POM for org.cyclonedx.model.Component@f15cdcaf: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':detachedConfiguration124'.

But does produce a bom.xml. From the above message, it's unclear what it's having trouble with. What is 'detachedConfigurationNNN'?

sub-projects use rootProject project metadata making them indistinguishable

I have a main project with 2 sub projects. All three of these boms have the same group name version and consequently the same purl. pkg:maven/my-group/[email protected] These should use their subProject settings.

my-root-project\
|- build\
|  |- reports\
|     |- bom.json
|- project1
|  |- build\
|     |- reports\
|        |- bom.json
|- project2
|  |- build\
|     |- reports\
|        |- bom.json

Expected purls:

I can't see a reason for this code below only using getProject().getRootProject() but if there's some legit reason for this, it should at least be configurable.

final Project project = getProject().getRootProject();
final Properties properties = readPluginProperties();
final Metadata metadata = new Metadata();
final Tool tool = new Tool();
tool.setVendor(properties.getProperty("vendor"));
tool.setName(properties.getProperty("name"));
tool.setVersion(properties.getProperty("version"));
// TODO: Attempt to add hash values from the current mojo
metadata.addTool(tool);
final Component component = new Component();
component.setGroup((StringUtils.trimToNull(project.getGroup().toString()) != null) ? project.getGroup().toString() : null);
component.setName(project.getName());
component.setVersion(project.getVersion().toString());
component.setType(resolveProjectType());
component.setPurl(generatePackageUrl(project.getGroup().toString(), project.getName(), project.getVersion().toString(), null ));

Workaroud waiting for release

I'm waiting for a release of this plugin. In the meantime is there any workaround?
Is it possible to get a pom.xml from gradle project with the dependencies and use the cyclonedx-maven-plugin to get the bom.xml and send it to dependency track for analysis?

[information] configuration on build.gradle and dependencies

Hello guys.

I have two doubts. Could you provide some assistance? Please.

I'm trying to use this plugin, and every configuration that I use, Gradle says to me that the property doesn't exist on task:
I'm doing only this configuration below:

cyclonedxBom {
    projectType = "application"
}

Gradle says to me that doesn't exist projectType on cyclonedxBom. How can I configure the task?

Second question:

I'm uploading the bom.json/bom.xml on Dependency Track and I can't see the dependency graph.
My bom.xml or bom.json doesn't have the "dependencies" entry. Where is the misconfiguration?

image

Thanks in advance.

Empty bom file generation

Hello,

I am getting an empty BOM file when running ./gradlew cyclonedxBom in my root directory.

Here is what the bom file looks like:

<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:e2ad52de-714f-428c-88e4-b1957d723b2c" version="1">
    <metadata>
        <timestamp>2020-10-28T09:19:44Z</timestamp>
        <tools>
            <tool>
                <vendor>CycloneDX</vendor>
                <name>CycloneDX Gradle Plugin</name>
                <version>1.2.0</version>
            </tool>
        </tools>
        <component bom-ref="pkg:maven/jcite@unspecified" type="library">
            <name>jcite</name>
            <version>unspecified</version>
            <scope>required</scope>
            <purl>pkg:maven/jcite@unspecified</purl>
        </component>
    </metadata>
    <components/>
</bom>

I ran the command with the debug flag and here is the output:
temp.txt

Do you have any idea why we are getting this issue?

Thanks!

Gradle fails: plugin org.cyclonedx.bom not found

Hi,

I wanted to try this plugin in a sample project. I changed build.gradle in following manner:

diff --git a/build.gradle b/build.gradle
index 59746ca..dab9488 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,10 @@ plugins {
     id 'groovy'                           //for mixed java/groovy project
     id 'war'                                //for genarating war files
     id 'org.akhikhl.gretty' version '2.0.0' //web app development plugin
+    id 'org.cyclonedx.bom' version '1.0.0' apply true
 }
+apply plugin: 'java'
+apply plugin: 'maven'
 
 sourceCompatibility = "1.8"
 targetCompatibility = "1.8"
@@ -16,7 +19,7 @@ task wrapper(type: Wrapper) {
 }
 
 repositories {
-    mavenCentral()
+    mavenCentral() //already there
     maven {
         url "http://maven.restlet.org/"
     }

It fails however with following error:

$ sh gradlew cyclonedxBom

FAILURE: Build failed with an exception.

* Where:
* Build file '/home/*****/repos/_external/softeng17b/build.gradle' line: 6
*
* * What went wrong:
* Plugin [id: 'org.cyclonedx.bom', version: '1.0.0'] was not found in any of the following sources:
*
* - Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
* - Gradle Central Plugin Repository (no 'org.cyclonedx.bom' plugin available - see https://plugins.gradle.org for available plugins)
*
* * Try:
* Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
*
* * Get more help at https://help.gradle.org
*
* BUILD FAILED in 1s
*

Could you help to check? Thanks.

CyclonedxBom task fails due to noSuchMethod error in fasterxml.jackson.dataformat

I am using the cyclonedx-gradle-plugin version 1.4.0 for Kotlin on Ubuntu 18.0. I get the following output when I run the
cycloneDx task -

Task :cyclonedxBom FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':cyclonedxBom'.

com.fasterxml.jackson.databind.cfg.MutableCoercionConfig com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()`

Caused by: java.lang.NoSuchMethodError: 'com.fasterxml.jackson.databind.cfg.MutableCoercionConfig com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()' at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:176) at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:145) at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:127) at org.cyclonedx.generators.xml.AbstractBomXmlGenerator.<init>(AbstractBomXmlGenerator.java:48) at org.cyclonedx.generators.xml.BomXmlGenerator13.<init>(BomXmlGenerator13.java:42) at org.cyclonedx.BomGeneratorFactory.createXml(BomGeneratorFactory.java:46) at org.cyclonedx.gradle.CycloneDxTask.writeXMLBom(CycloneDxTask.java:384) at org.cyclonedx.gradle.CycloneDxTask.writeBom(CycloneDxTask.java:373) at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:176) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)

Plugin 1.5.1 has dependency on 1.4.0

In the 1.5.1 build.gradle file:

id 'org.cyclonedx.bom' version '1.4.0' apply true

Looks like a temporary hack to me. Seems to build successfully without it. Maybe this was added for testing or development and left in accidentally?

Release 1.5.0 is not available on maven central

The latest version now available of cyclonedx-gradle-plugin is 1.4.0 https://search.maven.org/artifact/org.cyclonedx/cyclonedx-gradle-plugin/1.4.0/jar

Github latest release is 1.5.0

Instruction from README.md shows example using useModule('org.cyclonedx:cyclonedx-gradle-plugin:1.5.1')

Can you please this this inconsistency and publish actual release to maven central and actualize instructions

UPD
I found actual version at https://plugins.gradle.org/plugin/org.cyclonedx.bom/1.5.0.
But useModule('org.cyclonedx:cyclonedx-gradle-plugin:1.5.1') contains error. Because correct notation is useModule('com.cyclonedx:cyclonedx-gradle-plugin:1.5.0')

  • org -> com
  • 1.5.1 -> 1.5.0

Gradle plugin won't resolve json.schema dep

Having this issue:

A problem occurred configuring root project 'api'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find com.github.everit-org.json-schema:org.everit.json.schema:1.12.1.
     Searched in the following locations:
       - https://plugins.gradle.org/m2/com/github/everit-org/json-schema/org.everit.json.schema/1.12.1/org.everit.json.schema-1.12.1.pom
     If the artifact you are trying to retrieve can be found in the repository but without metadata in 'Maven POM' format, you need to adjust the 'metadataSources { ... }' of the repository declaration.
     Required by:
         project : > org.cyclonedx.bom:org.cyclonedx.bom.gradle.plugin:1.2.0 > com.cyclonedx:cyclonedx-gradle-plugin:1.2.0 > org.cyclonedx:cyclonedx-core-java:3.0.5

build.gradle

plugins {
    id("java")
    id("idea")
    id("org.springframework.boot") version "2.2.11.RELEASE"
    id("io.spring.dependency-management") version "1.0.10.RELEASE"
    id("org.cyclonedx.bom") version "1.2.0"
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

wrapper {
    distributionType = Wrapper.DistributionType.ALL
}

repositories {
    mavenCentral()
    jcenter()
}
...
...
...

settings.gradle

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.toString() == 'org.cyclonedx.bom') {
                useModule('org.cyclonedx:cyclonedx-gradle-plugin:1.2.0')
            }
        }
    }
    repositories {
        gradlePluginPortal()
        mavenCentral()
        maven {
            url = uri("https://jitpack.io")
        }
    }
}
...
...

ConcurrentModificationException when working with multiple sub-projects

We can see intermittent build failures on projects with multiple (4-5) sub-projects that involve CycloneDx. The stack trace might indicate a Gradle issue but it's in fact very similar to [1], so this is likely with the CycloneDX plugin.

This can be seen in Gradle 6.7. Unfortunately, I can't provide a small test project to reproduce as it only seems to happen on larger projects.

Caused by: java.util.ConcurrentModificationException
	at org.gradle.api.internal.DefaultDomainObjectCollection$IteratorImpl.next(DefaultDomainObjectCollection.java:479)
	at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:164)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)

[1] gradle/gradle#10042

How to configure skipping sub-projects?

We have a gradle android project that pulls in a dependant sub-project, which we are scanning by default. That behavior is causing our overall scan to fail. Is there some setting that will prevent scanning the sub-project? I am using

plugins {
   id 'org.cyclonedx.bom' version '1.2.0'
}

Build output contains:

BOM inclusion for configuration debugAndroidTestApiDependenciesMetadata : []
BOM inclusion for configuration debugAndroidTestCompile : []
:app:cyclonedxBom took 103ms
Task :app:cyclonedxBom in app Finished
:app:cyclonedxBom (Thread[Execution worker for ':',5,main]) completed. Took 1.782 secs.

> Task :domain:kaptGenerateStubsTestKotlin
Task :domain:kaptGenerateStubsTestKotlin in app Starting
Deleting stale output file: /sandbox/workspace/proton-android_sonarqube/fission/domain/build/tmp/kapt3/stubs/test
Build cache key for task ':domain:kaptGenerateStubsTestKotlin' is d0234ce42e26500c3061002441e4cb05
Task ':domain:kaptGenerateStubsTestKotlin' is not up-to-date because:
  No history is available.
The input changes require a full rebuild for incremental task ':domain:kaptGenerateStubsTestKotlin'.
file or directory '/sandbox/workspace/proton-android_sonarqube/fission/domain/src/test/java', not found
file or directory '/sandbox/workspace/proton-android_sonarqube/fission/domain/src/test/java', not found
Using Kotlin/JVM incremental compilation
i: found daemon on port 17962 (278000 ms old), trying to connect
i: connected to the daemon
Options for KOTLIN DAEMON: IncrementalCompilationOptions(super=CompilationOptions(compilerMode=INCREMENTAL_COMPILER, targetPlatform=JVM, reportCategories=[0], reportSeverity=2, requestedCompilationResults=[0]kotlinScriptExtensions=[kt, kts]), areFileChangesKnown=false, modifiedFiles=null, deletedFiles=null, workingDir=/sandbox/workspace/proton-android_sonarqube/fission/domain/build/kotlin/kaptGenerateStubsTestKotlin, multiModuleICSettings=MultiModuleICSettings(buildHistoryFile=/sandbox/workspace/proton-android_sonarqube/fission/domain/build/kotlin/kaptGenerateStubsTestKotlin/build-history.bin, useModuleDetection=false), usePreciseJavaTracking=trueoutputFiles=[/sandbox/workspace/proton-android_sonarqube/fission/domain/build/tmp/kapt3/incrementalData/test, /sandbox/workspace/proton-android_sonarqube/fission/domain/build/tmp/kapt3/stubs/test, /sandbox/workspace/proton-android_sonarqube/fission/domain/build/kotlin/kaptGenerateStubsTestKotlin])
Stored cache entry for task ':domain:kaptGenerateStubsTestKotlin' with cache key d0234ce42e26500c3061002441e4cb05
:domain:kaptGenerateStubsTestKotlin took 204ms
Task :domain:kaptGenerateStubsTestKotlin in app Finished
:domain:kaptGenerateStubsTestKotlin (Thread[Execution worker for ':' Thread 6,5,main]) completed. Took 0.453 secs.

This may be more of a gradle issue, will also ask there

Deprecations in gradle 7

./gradlew cyclonedxBom --warning-mode all

Task :cyclonedxBom
The archives configuration has been deprecated for resolution. This will fail with an error in Gradle 8.0. Please resolve the compileClasspath or runtimeClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/7.1/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
The default configuration has been deprecated for resolution. This will fail with an error in Gradle 8.0. Please resolve the compileClasspath or runtimeClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/7.1/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations

Gradle can't still resolve the 1.1.4 Version

I can see here that the 1.1.4 version was published but I'm still getting the same error as described here #56. I followed the provided usage instructions from the file README.md that work with the 1.1.3 version and differ from the instructions provided here. Nevertheless, I would like to make it work with instructions from the README.md file.

Gradle variant / attribute issues when running in a multiproject kotlin build

When running ./gradlew cyclonedxBom in my multi project build it fails with the following


* What went wrong:
Execution failed for task ':cyclonedxBom'.
> Could not resolve all dependencies for configuration ':some-project:apiDependenciesMetadata'.
   > Could not resolve project :some-other-project.
     Required by:
         project :some-project
      > Unable to find a matching variant of project :some-project:
          - Variant 'apiElements':
              - Found org.gradle.usage 'java-api' but wasn't required.
              - Required org.jetbrains.kotlin.platform.type 'common' and found incompatible value 'jvm'.
          - Variant 'runtimeElements':
              - Found org.gradle.usage 'java-runtime-jars' but wasn't required.
              - Required org.jetbrains.kotlin.platform.type 'common' and found incompatible value 'jvm'.

Using java 1.8
gradle wrapper 4.10.3
Kotlin version 1.2.71

Have had similar results on a few similar projects any advice ?

The externalReferences are only derived from the maven artifact

Problem

The plugin doesn't update meta information by the resolved POM file in the augmentComponentMetadata call. This lead to the situation that we miss some data like the VCS information for Spring and other libraries.

Proposal

By extracting the meta information during the augmentComponentMetadata call we would gain the external references like VCS in the generated BOM.

bom validation needs to consider the schemaVersion

Using a schemaVersion property override of "1.1" in the current 1.2.x plugin versions generates a bom correctly but fails the validation step. Looks like this line needs to provide the schemaVersion param as well: https://github.com/CycloneDX/cyclonedx-gradle-plugin/blob/cyclonedx-gradle-plugin-1.2.1/src/main/java/org/cyclonedx/gradle/CycloneDxTask.java#L383.

XmlParser uses the default schema version (1.2) resulting in error message The BOM does not conform to the CycloneDX BOM standard

The cyclonedxBom task fails at compileOnly dependencies with version enforced via platform

Hi,

I'm trying to incorporate Cyclone DX report to our company's project and it fails to resolve version of a compileOnly (compileApiOnly, too) dependency that has version enforced via the Java platform feature Gradle provides. Note that other dependency types like api, implementation, runtimeOnly work as expected.

I am using the plugin in version 1.2.0 (latest) and Gradle 6.7, and tried both OpenJDK 8 and OpenJDK 11.

Executing the task gradle cyclonedxBom produces the following error:

> Task :cyclonedxBom FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':cyclonedxBom'.
> Could not resolve all dependencies for configuration ':submodule1:compileOnly'.
   > Could not find com.github.spotbugs:spotbugs-annotations:.
     Required by:
         project :submodule1
   > Could not find javax.servlet:javax.servlet-api:.
     Required by:
         project :submodule1

* 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

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 818ms
1 actionable task: 1 executed

Also note that when running this task, Gradle reports usage of deprecated or unsafe APIs. The --warning-mode all option reveals issues that seem to be directly connected to the resolution of those dependencies:

The archives configuration has been deprecated for resolution. This will fail with an error in Gradle 7.0. Please resolve the compileClasspath or runtimeClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.7/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
The default configuration has been deprecated for resolution. This will fail with an error in Gradle 7.0. Please resolve the compileClasspath or runtimeClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.7/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
The configuration :bom:archives was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :bom:classpath was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :bom:default was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :dependencies:archives was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :dependencies:classpath was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :dependencies:default was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :submodule1:annotationProcessor was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :submodule1:archives was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The compile configuration has been deprecated for resolution. This will fail with an error in Gradle 7.0. Please resolve the compileClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.7/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
The configuration :submodule1:compile was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The configuration :submodule1:compileClasspath was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.
The compileOnly configuration has been deprecated for resolution. This will fail with an error in Gradle 7.0. Please resolve the compileClasspath configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.7/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations
The configuration :submodule1:compileOnly was resolved without accessing the project in a safe manner.  This may happen when a configuration is resolved from a different project. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0. See https://docs.gradle.org/6.7/userguide/viewing_debugging_dependencies.html#sub:resolving-unsafe-configuration-resolution-errors for more details.

The full example is included as an attachment, but to show the main configuration that leads to the issue, let me show how it's configured:

The java-platform module called dependencies that works as a BOM for the whole project basically looks like this:

javaPlatform {
    // allows importing other platforms/BOMs in a java-platform project
    allowDependencies()
}

dependencies {
    // First, import other BOMs
    //-------------------------
    api enforcedPlatform(project(':bom')) // BOM declaring just our modules, without the other dependencies

    // Second, define custom constraints (i.e. dependency management)
    //---------------------------------------------------------------
    constraints {
        api 'com.github.spotbugs:spotbugs-annotations:3.1.12'
        api 'javax.servlet:javax.servlet-api:3.1.0'
    }
}

Note those api dependencies under constraints.

Then we have a submodule's build.gradle file that specifies dependencies on those APIs:

dependencies {
    compileOnly 'com.github.spotbugs:spotbugs-annotations'
    compileOnly 'javax.servlet:javax.servlet-api'
}

I don't want to post the whole contents of the main build.gradle (see it in the attachment), but just to show how the dependencies platform is enforced on submodules, here's the excerpt that does that:

// ...

// configure java libraries
configure([
    project(':submodule1'),
    // ...
]) {
    apply plugin: 'java-library'

    dependencies {
        api enforcedPlatform(project(':bom'))
        api enforcedPlatform(project(':dependencies'))
    }

    // ...
}

A workaround for this issue is to specify the version of such compileOnly dependencies directly in the build.gradle file of each submodule that declares them, but that destroys the purpose of the platform (aka BOM) modules.

cyclonedx-gradle-issue.zip

Project build error when serenity-gradle-plugin is defined

Hi,

I'm trying to build my project with org.cyclonedx.bom plugin but I get the following error:

FAILURE: Build failed with an exception.

    What went wrong:
    A problem occurred configuring project ':app'.

    Could not resolve all artifacts for configuration ':app:classpath'.
    Could not find guice-5.0.1-no_aop.jar (com.google.inject:guice:5.0.1).
    Searched in the following locations:
    https://plugins.gradle.org/m2/com/google/inject/guice/5.0.1/guice-5.0.1-no_aop.jar

I prepared a sample project, which demonstrates the problem: https://github.com/baczus/sample-gradle-project
As you can see, the project has two more plugins application and net.serenity-bdd.serenity-gradle-plugin, which I use.
I noticed that if I comment out the second one, the project builds without any issues.

I created similar issue in serenity project: serenity-bdd/serenity-core#2571

Where to put "exclude names" instuction?

Where do I put this instruction to filter names?

cyclonedxBom {
    // skipConfigs is a list of configuration names to exclude when generating the BOM
    skipConfigs += ["compileClasspath", "testCompileClasspath"]
    // Specified the type of project being built. Defaults to 'library' 
    projectType = "application"
    // Specified the version of the CycloneDX specification to use. Defaults to 1.2.
    schemaVersion = "1.2"
}

I tried both settings.gradle and build.gradle, but it fails when I try to generate bom file:

Could not find method cyclonedxBom() for arguments

includeConfigs as alternative to skipConfigs

You can control the configurations included in the BOM using skipConfigs.

As an enhancement, it would be useful to be able to alternately explicitly specify includes using (say) includeConfigs. The intention is to allow the user to say what they want rather than what they do not want.

Currently, my plugin v1.3 setup has to specify 13 configs to skip:

cyclonedxBom {
    // Exclude test classpaths from BOM
    skipConfigs +=
            ["aClasspath",
             "anotherClasspath",
             "yetAnotherClasspath",
             "omg",
             "this",
             "is",
             "getting",
             "really",
             "tedious",
             "darnit",
             "still",
             "not",
             "finished"]

Convert SCM SSH URL's to HTTPS

Problem

The maven projects (pom files) sometimes contain SCM URL's as GIT SSH connect strings. Since they aren't valid URL this information get lost during the process (see also CycloneDX/specification#141).

Sample syntax for POM SCM URL's:

Samples:

Proposal

Convert the SCM URL to a valid HTTPS URL before the plugin calls addExternalReference.
Rules:

  • Remove scm:git: prefix
  • Replace git@ with https://
  • Replace git:// with https://
  • Replace : with /

Failing to retrieve licenses

Hi,

I've been testing this plugin on a few different Gradle projects that I have locally and it seems the plugin fails to find license information for a large amount of the dependencies of each project. I have looked up a few of the components and can see the license information is on Maven (where the purl says it's from) but in the generated bom the license information is empty i.e. "licenses" : [ ],

An example would be com.google.guava/[email protected] which has its license information on mvn (https://mvnrepository.com/artifact/com.google.guava/guava/28.1-jre) but the plugin doesn't detect this.

To run the plugin I add the plugin block to the projects build.gradle and then run "./gradlew cyclonedxBom", not sure if I'm missing a vital step!

Failed to load json schema: Operation timed out

Since few days I'm receiving the following error intermittently (usually if I run the task again it works):

> Task :cyclonedxBom FAILED
Failed to load json schema!
java.net.ConnectException: Operation timed out (Connection timed out)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
        at java.base/java.net.Socket.connect(Socket.java:609)
        at java.base/java.net.Socket.connect(Socket.java:558)
        at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
        at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
        at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
        at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
        at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:341)
        at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:362)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1592)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
        at com.networknt.schema.uri.URLFetcher.openConnectionCheckRedirects(URLFetcher.java:57)
        at com.networknt.schema.uri.URLFetcher.fetch(URLFetcher.java:43)
        at com.networknt.schema.uri.URISchemeFetcher.fetch(URISchemeFetcher.java:50)
        at com.networknt.schema.JsonSchemaFactory.getSchema(JsonSchemaFactory.java:337)
        at com.networknt.schema.RefValidator.getRefSchema(RefValidator.java:83)
        at com.networknt.schema.RefValidator.<init>(RefValidator.java:46)
        at jdk.internal.reflect.GeneratedConstructorAccessor94.newInstance(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at com.networknt.schema.ValidatorTypeCode.newValidator(ValidatorTypeCode.java:131)
        at com.networknt.schema.JsonMetaSchema.newValidator(JsonMetaSchema.java:351)
        at com.networknt.schema.ValidationContext.newValidator(ValidationContext.java:54)
        at com.networknt.schema.JsonSchema.read(JsonSchema.java:206)
        at com.networknt.schema.JsonSchema.getValidators(JsonSchema.java:356)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:227)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.BaseJsonValidator.validate(BaseJsonValidator.java:96)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:234)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:219)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:111)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:104)
        at org.cyclonedx.parsers.JsonParser.isValid(JsonParser.java:247)
        at org.cyclonedx.gradle.CycloneDxTask.writeJSONBom(CycloneDxTask.java:402)
        at org.cyclonedx.gradle.CycloneDxTask.writeBom(CycloneDxTask.java:366)
        at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:166)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:239)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at java.base/java.util.Optional.orElseGet(Optional.java:369)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
        at java.base/java.util.Optional.orElseGet(Optional.java:369)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Error:
java.lang.reflect.InvocationTargetException
        at jdk.internal.reflect.GeneratedConstructorAccessor94.newInstance(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at com.networknt.schema.ValidatorTypeCode.newValidator(ValidatorTypeCode.java:131)
        at com.networknt.schema.JsonMetaSchema.newValidator(JsonMetaSchema.java:351)
        at com.networknt.schema.ValidationContext.newValidator(ValidationContext.java:54)
        at com.networknt.schema.JsonSchema.read(JsonSchema.java:206)
        at com.networknt.schema.JsonSchema.getValidators(JsonSchema.java:356)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:227)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.BaseJsonValidator.validate(BaseJsonValidator.java:96)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:234)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:219)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:111)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:104)
        at org.cyclonedx.parsers.JsonParser.isValid(JsonParser.java:247)
        at org.cyclonedx.gradle.CycloneDxTask.writeJSONBom(CycloneDxTask.java:402)
        at org.cyclonedx.gradle.CycloneDxTask.writeBom(CycloneDxTask.java:366)
        at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:166)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:239)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at java.base/java.util.Optional.orElseGet(Optional.java:369)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
        at java.base/java.util.Optional.orElseGet(Optional.java:369)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.networknt.schema.JsonSchemaException: java.net.ConnectException: Operation timed out (Connection timed out)
        at com.networknt.schema.JsonSchemaFactory.getSchema(JsonSchemaFactory.java:361)
        at com.networknt.schema.RefValidator.getRefSchema(RefValidator.java:83)
        at com.networknt.schema.RefValidator.<init>(RefValidator.java:46)
        at jdk.internal.reflect.GeneratedConstructorAccessor94.newInstance(Unknown Source)
        at [email protected]/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at com.networknt.schema.ValidatorTypeCode.newValidator(ValidatorTypeCode.java:131)
        at com.networknt.schema.JsonMetaSchema.newValidator(JsonMetaSchema.java:351)
        at com.networknt.schema.ValidationContext.newValidator(ValidationContext.java:54)
        at com.networknt.schema.JsonSchema.read(JsonSchema.java:206)
        at com.networknt.schema.JsonSchema.getValidators(JsonSchema.java:356)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:227)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:49)
        at com.networknt.schema.RefValidator.validate(RefValidator.java:138)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:93)
        at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:80)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:70)
        at com.networknt.schema.JsonSchema.validate(JsonSchema.java:229)
        at com.networknt.schema.BaseJsonValidator.validate(BaseJsonValidator.java:96)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:234)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:219)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:111)
        at org.cyclonedx.parsers.JsonParser.validate(JsonParser.java:104)
        at org.cyclonedx.parsers.JsonParser.isValid(JsonParser.java:247)
        at org.cyclonedx.gradle.CycloneDxTask.writeJSONBom(CycloneDxTask.java:402)
        at org.cyclonedx.gradle.CycloneDxTask.writeBom(CycloneDxTask.java:366)
        at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:166)
        at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:239)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: java.net.ConnectException: Operation timed out (Connection timed out)
        at com.networknt.schema.uri.URLFetcher.openConnectionCheckRedirects(URLFetcher.java:57)
        at com.networknt.schema.uri.URLFetcher.fetch(URLFetcher.java:43)
        at com.networknt.schema.uri.URISchemeFetcher.fetch(URISchemeFetcher.java:50)
        at com.networknt.schema.JsonSchemaFactory.getSchema(JsonSchemaFactory.java:337)
        ... 157 more

Gradle 7.1 [Android] Execution failed for task ':app:cyclonedxBom'.

os

Android Studio 2021.1.1 version
gradle 7.1.1
java version "11.0.7" 2020-04-14 LTS

details

The demo project failed to obtain dependencies,
The configuration is as follows

No problem after replacing with gradle version 4.2.2......

build.gradle in the root directory

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.1.1' apply false
    id 'com.android.library' version '7.1.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
    id "org.cyclonedx.bom" version "1.4.1" apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app/build.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.h.testabc"
        minSdk 21
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = '11'
    }
    buildFeatures {
        viewBinding true
    }
}

apply plugin: "org.cyclonedx.bom"

// skipConfigs doesn't work
cyclonedxBom {
    // skipConfigs is a list of configuration names to exclude when generating the BOM
    //skipConfigs += [":app:debugAndroidTestCompileClasspath", "testCompileClasspath","demoDebugAndroidTestCompileClasspath","app:demoDebugAndroidTestCompileClasspath",":app:demoDebugAndroidTestCompileClasspath"]
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

error log

Execution failed for task ':app:cyclonedxBom'.
> Could not resolve all dependencies for configuration ':app:debugAndroidTestCompileClasspath'.
   > The consumer was configured to find an API of a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm'. However we cannot choose between the following variants of project :app:
       - Configuration ':app:debugApiElements' variant android-base-module-metadata declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-base-module-metadata' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-feature-all-metadata declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-feature-all-metadata' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-feature-res-ap_ declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-feature-res-ap_' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-feature-signing-config-data declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-feature-signing-config-data' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-feature-signing-config-versions declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-feature-signing-config-versions' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-java-res declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-java-res' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)
       - Configuration ':app:debugApiElements' variant android-manifest-metadata declares an API of a component, as well as attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '7.1.1', attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm':
           - Unmatched attributes:
               - Provides attribute 'artifactType' with value 'android-manifest-metadata' but the consumer didn't ask for it
               - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'debug' but the consumer didn't ask for it
               - Doesn't say anything about its target Java environment (preferred optimized for Android)

* 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.

Error parsing POM skips dependency without logging of maven coordinates

Tested with version 1.4.1.

Running gradle cyclonedxBom -S on a project that consumes a dependency with a not well formed POM file gives this output:

10:47:20  > Task :server:eksternregisterweb:cyclonedxBom
10:47:20  An error occurred attempting to read POM
10:47:20  org.codehaus.plexus.util.xml.pull.XmlPullParserException: Unrecognised tag: 'groupId' (position: START_TAG seen ...<dependencies>\n    <groupId>... @24:14) 
10:47:20  	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.checkUnknownElement(MavenXpp3Reader.java:178)
10:47:20  	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2239)
10:47:20  	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3852)
10:47:20  	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595)
10:47:20  	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609)
10:47:20  	at org.cyclonedx.gradle.MavenHelper.readPom(MavenHelper.java:298)
10:47:20  	at org.cyclonedx.gradle.MavenHelper.readPom(MavenHelper.java:285)
10:47:20  	at org.cyclonedx.gradle.CycloneDxTask.getResolvedMavenProject(CycloneDxTask.java:222)
10:47:20  	at org.cyclonedx.gradle.CycloneDxTask.augmentComponentMetadata(CycloneDxTask.java:234)
10:47:20  	at org.cyclonedx.gradle.CycloneDxTask.lambda$null$3(CycloneDxTask.java:167)
10:47:20  	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
10:47:20  	at org.cyclonedx.gradle.CycloneDxTask.lambda$createBom$4(CycloneDxTask.java:156)
10:47:20  	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
10:47:20  	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
10:47:20  	at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
10:47:20  	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
10:47:20  	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
10:47:20  	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
10:47:20  	at java.base/java.util.TreeMap$KeySpliterator.forEachRemaining(TreeMap.java:2739)
10:47:20  	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
10:47:20  	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
10:47:20  	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
10:47:20  	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
10:47:20  	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
10:47:20  	at org.cyclonedx.gradle.CycloneDxTask.createBom(CycloneDxTask.java:174)
10:47:20  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:47:20  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
10:47:20  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
10:47:20  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
10:47:20  	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
10:47:20  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
10:47:20  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
10:47:20  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:494)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
10:47:20  	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:479)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:462)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$400(ExecuteActionsTaskExecuter.java:105)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:273)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:251)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep.lambda$executeOperation$1(ExecuteStep.java:66)
10:47:20  	at java.base/java.util.Optional.orElseGet(Optional.java:369)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep.executeOperation(ExecuteStep.java:66)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:34)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:44)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
10:47:20  	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
10:47:20  	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
10:47:20  	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:72)
10:47:20  	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:42)
10:47:20  	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:53)
10:47:20  	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)
10:47:20  	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:44)
10:47:20  	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:77)
10:47:20  	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:58)
10:47:20  	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:54)
10:47:20  	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:32)
10:47:20  	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:57)
10:47:20  	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:38)
10:47:20  	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:63)
10:47:20  	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:30)
10:47:20  	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:176)
10:47:20  	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:76)
10:47:20  	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
10:47:20  	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:43)
10:47:20  	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:32)
10:47:20  	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:39)
10:47:20  	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:25)
10:47:20  	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:102)
10:47:20  	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:95)
10:47:20  	at java.base/java.util.Optional.map(Optional.java:265)
10:47:20  	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
10:47:20  	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
10:47:20  	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:83)
10:47:20  	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
10:47:20  	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
10:47:20  	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
10:47:20  	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:96)
10:47:20  	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:52)
10:47:20  	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:83)
10:47:20  	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:54)
10:47:20  	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
10:47:20  	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:88)
10:47:20  	at java.base/java.util.Optional.orElseGet(Optional.java:369)
10:47:20  	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
10:47:20  	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
10:47:20  	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
10:47:20  	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:46)
10:47:20  	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:34)
10:47:20  	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:43)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$3.withWorkspace(ExecuteActionsTaskExecuter.java:286)
10:47:20  	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:43)
10:47:20  	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:33)
10:47:20  	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:40)
10:47:20  	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:30)
10:47:20  	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:54)
10:47:20  	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:40)
10:47:20  	at org.gradle.internal.execution.impl.DefaultExecutionEngine.rebuild(DefaultExecutionEngine.java:46)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$0(ExecuteActionsTaskExecuter.java:182)
10:47:20  	at java.base/java.util.Optional.map(Optional.java:265)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:182)
10:47:20  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
10:47:20  	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
10:47:20  	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
10:47:20  	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
10:47:20  	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
10:47:20  	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
10:47:20  	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
10:47:20  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
10:47:20  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
10:47:20  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
10:47:20  	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
10:47:20  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
10:47:20  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
10:47:20  	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
10:47:20  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
10:47:20  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
10:47:20  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
10:47:20  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
10:47:20  	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
10:47:20  	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
10:47:20  	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
10:47:20  	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
10:47:20  	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
10:47:20  	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
10:47:20  	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
10:47:20  	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
10:47:20  	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
10:47:20  	at java.base/java.lang.Thread.run(Thread.java:829)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.