在 gradle 中为每个项目类型配置清单

Configure manifest per project type in gradle

我正尝试在每个项目类型 gradle 中配置清单文件。

对于 jar,配置清单很容易:

jar {
  manifest {
    attributes 'Implementation-Title': 'Gradle Corporate plugin',
              'Implementation-Version': version,
              'Built-By': System.getProperty('user.name'),
              'Built-Date': new Date(),
              'Built-JDK': System.getProperty('java.version'),
              'Built-Gradle': gradle.gradleVersion
  }
}

对于 war 和耳朵来说同样容易。

我的问题是,我写了一个所有项目都使用的公司插件。

在这个插件中,我需要为所有项目配置清单。

遍历所有项目并确定项目类型很容易,但是为特定项目和类型配置清单有点棘手。

project.allprojects {
    configureManifest(it)
}

我正在努力实现类似的目标:

private configureManifest(Project project) {
if (isEarPlugin) {
    project.ear {
        manifest { }
    }
} else if (isWarPlugin) {
    project.war {
        manifest { }
    }
} else {
    project.jar {
        manifest { }
    }
}
}

以下两种方法可以解决问题。

为了我的耳朵:

private void doManifestEar(Project project) {
  project.plugins.withType(EarPlugin) {
    project.apply(plugin: 'java')
    project.ear {
      manifest {
        attributes 'Implementation-Title': project.projectDescription,
                'Implementation-Version': project.version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('java.version'),
                'Built-Gradle': project.gradle.gradleVersion
      }
    }
  }
}

我的 war:

private void doManifestWar(Project project) {
  project.plugins.withType(WarPlugin) {
    project.apply(plugin: 'java')
    project.war {
      manifest {
        attributes 'Implementation-Title': project.projectDescription,
                'Implementation-Version': project.version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('java.version'),
                'Built-Gradle': project.gradle.gradleVersion
      }
    }
  }
}