From e890e1cf3975274e61fee77fee7b294aff2431b3 Mon Sep 17 00:00:00 2001 From: iamdanfox Date: Thu, 20 Feb 2020 18:07:28 +0000 Subject: [PATCH] checkClassUniqueness works with conjure (#1250) checkClassUniqueness should now behave consistently when asked to analyze configurations that are `builtBy` other tasks (e.g. gradle-conjure, gradle-atlas) --- changelog/@unreleased/pr-1250.v2.yml | 6 ++++++ .../best-practices/java-coding-guidelines/readme.md | 2 +- .../plugins/BaselineClassUniquenessPlugin.java | 13 +++++++++++-- .../baseline/BaselineIntegrationTest.groovy | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 changelog/@unreleased/pr-1250.v2.yml diff --git a/changelog/@unreleased/pr-1250.v2.yml b/changelog/@unreleased/pr-1250.v2.yml new file mode 100644 index 000000000..035aae096 --- /dev/null +++ b/changelog/@unreleased/pr-1250.v2.yml @@ -0,0 +1,6 @@ +type: fix +fix: + description: checkClassUniqueness should now behave consistently when asked to analyze + configurations that are `builtBy` other tasks (e.g. gradle-conjure, gradle-atlas) + links: + - https://github.com/palantir/gradle-baseline/pull/1250 diff --git a/docs/best-practices/java-coding-guidelines/readme.md b/docs/best-practices/java-coding-guidelines/readme.md index 8e3af0e22..73365345c 100644 --- a/docs/best-practices/java-coding-guidelines/readme.md +++ b/docs/best-practices/java-coding-guidelines/readme.md @@ -86,7 +86,7 @@ topics: all offices) - Java Concurrency in Practice (copies exist in all offices) - [Writing Testable Code](http://misko.hevery.com/code-reviewers-guide/) -- [How to Design a GoodAPI and Why it Matters (Bloch)](http://lcsd05.cs.tamu.edu/slides/keynote.pdf) +- [How to Design a GoodAPI and Why it Matters (Bloch)](http://fwdinnovations.net/whitepaper/APIDesign.pdf) ## Miscellaneous diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java index 69daec35c..7335c092c 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineClassUniquenessPlugin.java @@ -21,6 +21,7 @@ import java.util.List; import org.gradle.StartParameter; import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.tasks.TaskProvider; import org.gradle.language.base.plugins.LifecycleBasePlugin; @@ -41,8 +42,16 @@ public final void apply(Project project) { project.getTasks().getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(checkClassUniqueness); project.getPlugins().withId("java", plugin -> { - checkClassUniqueness.configure(t -> t.configurations.add( - project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME))); + checkClassUniqueness.configure(t -> { + Configuration runtimeClasspath = + project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + t.configurations.add(runtimeClasspath); + + // runtimeClasspath might contain jars which are 'builtBy' other tasks, for example conjure-generated + // objects. This dependsOn ensures that all those pre-requisite tasks get invoked first, otherwise + // we see log.info warnings about missing jars e.g. 'Skipping non-existent jar foo-api-objects.jar' + t.dependsOn(runtimeClasspath); + }); }); // Wire up dependencies so running `./gradlew --write-locks` will update the lock file diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineIntegrationTest.groovy index a8f692379..6b4c7ce22 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineIntegrationTest.groovy @@ -43,6 +43,6 @@ class BaselineIntegrationTest extends AbstractPluginTest { with().withArguments('-s').withGradleVersion(gradleVersion).build() where: - gradleVersion << ['5.4', '6.0-20190904072820+0000'] + gradleVersion << ['5.4', '6.2'] } }