From 327d546705c8222192667ca1a1dbcc1f06209fff Mon Sep 17 00:00:00 2001
From: Nicholas Blair <nicholas.blair@wisc.edu>
Date: Wed, 31 Aug 2016 09:06:40 -0500
Subject: [PATCH] feat: always populate MANIFEST with project.name and .version

---
 build.gradle                                  | 11 +++++++--
 .../gradle/ContinuousPublishPlugin.groovy     | 24 +++++++++++++++++++
 .../gradle/ContinuousPublishPluginTest.groovy |  1 +
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/build.gradle b/build.gradle
index 0314851..4e99f25 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,5 +1,5 @@
 group 'edu.wisc.doit.gradle'
-version '0.1.1'
+version '0.2.0'
 
 apply plugin: 'groovy'
 apply plugin: 'idea'
@@ -26,7 +26,14 @@ publishing {
         }
     }
 }
-
+jar {
+  manifest {
+    attributes(
+      'Implementation-Title': project.name,
+      'Implementation-Version': project.version,
+    )
+  }
+}
 uploadArchives {
   repositories {
     mavenDeployer {
diff --git a/src/main/groovy/edu/wisc/doit/gradle/ContinuousPublishPlugin.groovy b/src/main/groovy/edu/wisc/doit/gradle/ContinuousPublishPlugin.groovy
index 8c9e535..df1a1be 100644
--- a/src/main/groovy/edu/wisc/doit/gradle/ContinuousPublishPlugin.groovy
+++ b/src/main/groovy/edu/wisc/doit/gradle/ContinuousPublishPlugin.groovy
@@ -2,6 +2,7 @@ package edu.wisc.doit.gradle
 
 import org.gradle.api.Plugin
 import org.gradle.api.Project
+import org.gradle.api.Task
 
 /**
  * Root Gradle {@link Plugin} class.
@@ -19,5 +20,28 @@ class ContinuousPublishPlugin implements Plugin<Project> {
     project.getTasks()
       .create("confirmProjectVersionIncremented",
         ConfirmProjectVersionIncrementedTask.class)
+
+    // findByName can return null; getByName throws UnknownTaskException
+    configureManifest(project.getTasks().findByName("jar"))
+    configureManifest(project.getTasks().findByName("war"))
+  }
+
+  /**
+   * Set 'Implementation-Title' and 'Implementation-Version' attributes
+   * in the task's manifest
+   *
+   * See https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html
+   *
+   * @param task the task to configure (null safe)
+   */
+  void configureManifest(Task task) {
+    task?.configure {
+      manifest {
+        attributes(
+          'Implementation-Title': project.name,
+          'Implementation-Version': project.version
+        )
+      }
+    }
   }
 }
diff --git a/src/test/groovy/edu/wisc/doit/gradle/ContinuousPublishPluginTest.groovy b/src/test/groovy/edu/wisc/doit/gradle/ContinuousPublishPluginTest.groovy
index 65f2fef..5789ee5 100644
--- a/src/test/groovy/edu/wisc/doit/gradle/ContinuousPublishPluginTest.groovy
+++ b/src/test/groovy/edu/wisc/doit/gradle/ContinuousPublishPluginTest.groovy
@@ -16,6 +16,7 @@ class ContinuousPublishPluginTest {
   @Test
   public void pluginAddsTaskToProject() {
     Project project = ProjectBuilder.builder().build()
+    project.pluginManager.apply 'java'
     project.pluginManager.apply 'edu.wisc.doit.gradle.continuous-publish-plugin'
 
     assertTrue(project.tasks.confirmProjectVersionIncremented instanceof ConfirmProjectVersionIncrementedTask)
-- 
GitLab