diff --git a/src/main/java/com/jfrog/ide/common/gradle/GradleDriver.java b/src/main/java/com/jfrog/ide/common/gradle/GradleDriver.java index 90230642..25499c90 100644 --- a/src/main/java/com/jfrog/ide/common/gradle/GradleDriver.java +++ b/src/main/java/com/jfrog/ide/common/gradle/GradleDriver.java @@ -75,8 +75,9 @@ public List generateDependenciesGraphAsJson(File workingDirectory, Log log // Copy init script to the temp file Files.copy(gradleInitScript, initScript, StandardCopyOption.REPLACE_EXISTING); - // Run "gradle generateDepTrees -q -I " -Dcom.jfrog.depsTreeOutputFile= - List args = Lists.newArrayList("generateDepTrees", "-q", "-I", initScript.toString(), + // Run "gradle generateDepTrees --no-daemon -q -I " -Dcom.jfrog.depsTreeOutputFile= + // --no-daemon avoids sharing the Gradle daemon with the main build (prevents cache lock/contentions on CI). + List args = Lists.newArrayList("generateDepTrees", "--no-daemon", "-q", "-I", initScript.toString(), "-Dcom.jfrog.depsTreeOutputFile=" + outputFile.toString()); runCommand(workingDirectory, args, logger); List files = new ArrayList<>(); diff --git a/src/main/java/com/jfrog/ide/common/nodes/subentities/ImpactPath.java b/src/main/java/com/jfrog/ide/common/nodes/subentities/ImpactPath.java index c43bd171..fa5cf049 100644 --- a/src/main/java/com/jfrog/ide/common/nodes/subentities/ImpactPath.java +++ b/src/main/java/com/jfrog/ide/common/nodes/subentities/ImpactPath.java @@ -8,6 +8,8 @@ @Getter public class ImpactPath { + @JsonProperty() + private String id; @JsonProperty() private String name; @JsonProperty() @@ -18,6 +20,13 @@ public class ImpactPath { public ImpactPath() { } + @SuppressWarnings("unused") + public ImpactPath(String dependencyId, String dependencyName, String dependencyVersion) { + this.id = dependencyId; + this.name = dependencyName; + this.version = dependencyVersion; + } + @SuppressWarnings("unused") public ImpactPath(String dependencyName, String dependencyVersion) { this.name = dependencyName; diff --git a/src/test/java/com/jfrog/ide/common/gradle/GradleTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/gradle/GradleTreeBuilderTest.java index 564ae701..5e30a241 100644 --- a/src/test/java/com/jfrog/ide/common/gradle/GradleTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/gradle/GradleTreeBuilderTest.java @@ -85,6 +85,14 @@ private DepTree buildGradleDependencyTree(String projectPath) throws IOException Map env = new HashMap<>(System.getenv()); env.put("pluginLibDir", GradleDependencyNode.class.getProtectionDomain().getCodeSource().getLocation().getPath()); + // Isolate Gradle cache to avoid CI failures: test's Gradle subprocess otherwise uses ~/.gradle, + // causing "Failed to create Jar file" (concurrent writes) and "Unable to create directory 'reports/profile'". + File gradleUserHome = new File(tempProject, ".gradle-test-cache"); + if (!gradleUserHome.exists() && !gradleUserHome.mkdirs()) { + throw new IOException("Could not create isolated GRADLE_USER_HOME: " + gradleUserHome); + } + env.put("GRADLE_USER_HOME", gradleUserHome.getAbsolutePath()); + Path projectDir = tempProject.toPath(); String descriptorFileName = "build.gradle"; if (projectPath.toLowerCase().contains("kotlin")) { diff --git a/src/test/resources/gradle/groovy/api/build.gradle b/src/test/resources/gradle/groovy/api/build.gradle index 492158b1..be57ee4b 100644 --- a/src/test/resources/gradle/groovy/api/build.gradle +++ b/src/test/resources/gradle/groovy/api/build.gradle @@ -4,9 +4,8 @@ configurations { dependencies { implementation project(':shared') - implementation module("commons-lang:commons-lang:2.4") { - dependency("commons-io:commons-io:1.2") - } + implementation 'commons-lang:commons-lang:2.4' + implementation 'commons-io:commons-io:1.2' implementation group: 'org.apache.wicket', name: 'wicket', version: '1.3.7' } diff --git a/src/test/resources/gradle/kotlin/build.gradle.kts b/src/test/resources/gradle/kotlin/build.gradle.kts index 64eba09f..81a43b5a 100644 --- a/src/test/resources/gradle/kotlin/build.gradle.kts +++ b/src/test/resources/gradle/kotlin/build.gradle.kts @@ -1,21 +1,3 @@ -import org.jfrog.gradle.plugin.artifactory.task.ArtifactoryTask - -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - dependencies { - classpath("org.jfrog.buildinfo", "build-info-extractor-gradle", "4.+") - } - configurations.classpath { - resolutionStrategy { - cacheDynamicVersionsFor(0, "seconds") - cacheChangingModulesFor(0, "seconds") - } - } -} - plugins { java `maven-publish` @@ -28,8 +10,6 @@ fun javaProjects() = subprojects.filter { val currentVersion: String by project allprojects { - apply(plugin = "com.jfrog.artifactory") - group = "org.jfrog.test.gradle.publish" version = currentVersion status = "Integration" @@ -39,16 +19,6 @@ allprojects { } } -tasks.named("artifactoryPublish") { - skip = true -} - -project("services") { - tasks.named("artifactoryPublish") { - skip = true - } -} - configure(javaProjects()) { apply(plugin = "java") apply(plugin = "maven-publish") @@ -90,43 +60,5 @@ project("api") { } } } - - tasks.named("artifactoryPublish") { - publications(publishing.publications["ivyJava"]) - } -} - -configure { - clientConfig.isIncludeEnvVars = true - - setContextUrl("http://127.0.0.1:8081/artifactory") - publish { - repository { - setRepoKey("libs-snapshot-local") // The Artifactory repository key to publish to - setUsername(findProperty("artifactory_user")) // The publisher user name - setPassword(findProperty("artifactory_password")) // The publisher password - // This is an optional section for configuring Ivy publication (when publishIvy = true). - ivy { - setIvyLayout("[organization]/[module]/ivy-[revision].xml") - setArtifactLayout("[organization]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]") - setMavenCompatible(true) // Convert any dots in an [organization] layout value to path separators, similar to Maven"s groupId-to-path conversion. True if not specified - } - } - - defaults { - // Reference to Gradle publications defined in the build script. - // This is how we tell the Artifactory Plugin which artifacts should be - // published to Artifactory. - publications("mavenJava") - setPublishArtifacts(true) - // Properties to be attached to the published artifacts. - setProperties(mapOf( - "qa.level" to "basic", - "dev.team" to "core" - )) - setPublishPom(true) // Publish generated POM files to Artifactory (true by default) - setPublishIvy(true) // Publish generated Ivy descriptor files to Artifactory (true by default) - } - } } diff --git a/src/test/resources/gradle/unresolvedGroovy/api/build.gradle b/src/test/resources/gradle/unresolvedGroovy/api/build.gradle index 492158b1..be57ee4b 100644 --- a/src/test/resources/gradle/unresolvedGroovy/api/build.gradle +++ b/src/test/resources/gradle/unresolvedGroovy/api/build.gradle @@ -4,9 +4,8 @@ configurations { dependencies { implementation project(':shared') - implementation module("commons-lang:commons-lang:2.4") { - dependency("commons-io:commons-io:1.2") - } + implementation 'commons-lang:commons-lang:2.4' + implementation 'commons-io:commons-io:1.2' implementation group: 'org.apache.wicket', name: 'wicket', version: '1.3.7' } diff --git a/src/test/resources/gradle/unresolvedKotlin/build.gradle.kts b/src/test/resources/gradle/unresolvedKotlin/build.gradle.kts index 645a07ea..177d3954 100644 --- a/src/test/resources/gradle/unresolvedKotlin/build.gradle.kts +++ b/src/test/resources/gradle/unresolvedKotlin/build.gradle.kts @@ -1,21 +1,3 @@ -import org.jfrog.gradle.plugin.artifactory.task.ArtifactoryTask - -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - dependencies { - classpath("org.jfrog.buildinfo", "build-info-extractor-gradle", "4.+") - } - configurations.classpath { - resolutionStrategy { - cacheDynamicVersionsFor(0, "seconds") - cacheChangingModulesFor(0, "seconds") - } - } -} - plugins { java `maven-publish` @@ -28,8 +10,6 @@ fun javaProjects() = subprojects.filter { val currentVersion: String by project allprojects { - apply(plugin = "com.jfrog.artifactory") - group = "org.jfrog.test.gradle.publish" version = currentVersion status = "Integration" @@ -39,16 +19,6 @@ allprojects { } } -tasks.named("artifactoryPublish") { - skip = true -} - -project("services") { - tasks.named("artifactoryPublish") { - skip = true - } -} - configure(javaProjects()) { apply(plugin = "java") apply(plugin = "maven-publish") @@ -90,43 +60,5 @@ project("api") { } } } - - tasks.named("artifactoryPublish") { - publications(publishing.publications["ivyJava"]) - } -} - -configure { - clientConfig.isIncludeEnvVars = true - - setContextUrl("http://127.0.0.1:8081/artifactory") - publish { - repository { - setRepoKey("libs-snapshot-local") // The Artifactory repository key to publish to - setUsername(findProperty("artifactory_user")) // The publisher user name - setPassword(findProperty("artifactory_password")) // The publisher password - // This is an optional section for configuring Ivy publication (when publishIvy = true). - ivy { - setIvyLayout("[organization]/[module]/ivy-[revision].xml") - setArtifactLayout("[organization]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]") - setMavenCompatible(true) // Convert any dots in an [organization] layout value to path separators, similar to Maven"s groupId-to-path conversion. True if not specified - } - } - - defaults { - // Reference to Gradle publications defined in the build script. - // This is how we tell the Artifactory Plugin which artifacts should be - // published to Artifactory. - publications("mavenJava") - setPublishArtifacts(true) - // Properties to be attached to the published artifacts. - setProperties(mapOf( - "qa.level" to "basic", - "dev.team" to "core" - )) - setPublishPom(true) // Publish generated POM files to Artifactory (true by default) - setPublishIvy(true) // Publish generated Ivy descriptor files to Artifactory (true by default) - } - } }