diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index ad3b538e..693899b7 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -27,7 +27,7 @@ jobs: gradle-build-root: gradle-twirl cmd: | sbt validateCode - sbt compiler/publishM2 + sbt +compiler/publishM2 cd gradle-twirl && ./gradlew clean spotlessCheck --no-daemon check-binary-compatibility: diff --git a/gradle-twirl/build.gradle.kts b/gradle-twirl/build.gradle.kts index 5132ca5e..0ded2999 100644 --- a/gradle-twirl/build.gradle.kts +++ b/gradle-twirl/build.gradle.kts @@ -17,7 +17,7 @@ plugins { val compilerVersion: String = Properties().apply { val file = file("$projectDir/../compiler/version.properties") - if (!file.exists()) throw GradleException("Install Twirl Compiler to local Maven repository by `sbt compiler/publishM2` command") + if (!file.exists()) throw GradleException("Install Twirl Compiler to local Maven repository by `sbt +compiler/publishM2` command") file.inputStream().use { load(it) } if (this.getProperty("twirl.compiler.version").isNullOrEmpty()) throw GradleException("`twirl.compiler.version` key didn't find in ${file.absolutePath}") }.getProperty("twirl.compiler.version") @@ -32,6 +32,16 @@ repositories { mavenLocal() } +dependencies { + compileOnly("com.typesafe.play:twirl-compiler_2.13:$compilerVersion") +} + +tasks.jar { + manifest { + attributes("Implementation-Version" to version) + } +} + testing { suites { // Configure the built-in test suite diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java index 0629fc88..9ccee52d 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java @@ -6,6 +6,8 @@ import javax.inject.Inject; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.DirectoryProperty; import org.gradle.api.internal.lambdas.SerializableLambdas; import org.gradle.api.internal.tasks.DefaultSourceSet; import org.gradle.api.model.ObjectFactory; @@ -30,9 +32,27 @@ public TwirlPlugin(ObjectFactory objectFactory) { public void apply(final Project project) { project.getPluginManager().apply(ScalaBasePlugin.class); + Configuration twirlConfiguration = createDefaultTwirlConfiguration(project); + configureSourceSetDefaults(project); } + private Configuration createDefaultTwirlConfiguration(Project project) { + // Get Twirl version from Gradle Plugin MANIFEST.MF + String twirlVersion = getClass().getPackage().getImplementationVersion(); + Configuration conf = project.getConfigurations().create("twirl"); + conf.setDescription("The Twirl compiler library."); + conf.setVisible(false); + conf.setTransitive(true); + conf.defaultDependencies( + dependencies -> + dependencies.add( + project + .getDependencies() + .create("com.typesafe.play:twirl-compiler_2.13:" + twirlVersion))); + return conf; + } + private void configureSourceSetDefaults(final Project project) { javaPluginExtension(project) .getSourceSets() @@ -64,11 +84,15 @@ private void createTwirlCompileTask( twirlCompile -> { twirlCompile.setDescription("Compiles the " + twirlSource + "."); twirlCompile.setSource(twirlSource); + DirectoryProperty buildDirectory = project.getLayout().getBuildDirectory(); twirlCompile .getDestinationDirectory() - .convention(project.getLayout().getBuildDirectory()) - .dir( - "generated/sources/" + twirlSource.getName() + "/" + sourceSet.getName()); + .convention( + buildDirectory.dir( + "generated/sources/" + + twirlSource.getName() + + "/" + + sourceSet.getName())); }); }