This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY-11571
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 518f7ab3140d202a202e5684b0a9b1fdff69a8e7
Author: Eric Milles <[email protected]>
AuthorDate: Tue Feb 25 16:38:03 2025 -0600

    remove excess manifest attributes
    
    * Bundle-ClassPath
    * DynamicImport-Package
    * Eclipse-BuddyPolicy
    * Eclipse-ExtensibleAPI
    * Extension-Name
---
 .../src/main/groovy/org.apache.groovy-base.gradle  | 69 +++++++++++-----------
 .../src/main/groovy/org.apache.groovy-core.gradle  | 12 ++--
 .../main/groovy/org.apache.groovy-library.gradle   | 23 ++++----
 .../groovy/gradle/GroovyLibraryExtension.groovy    | 54 +++++++++--------
 .../org/apache/groovy/gradle/JarJarTask.groovy     | 17 ++----
 5 files changed, 82 insertions(+), 93 deletions(-)

diff --git a/build-logic/src/main/groovy/org.apache.groovy-base.gradle 
b/build-logic/src/main/groovy/org.apache.groovy-base.gradle
index 687c461d93..8be3e653d8 100644
--- a/build-logic/src/main/groovy/org.apache.groovy-base.gradle
+++ b/build-logic/src/main/groovy/org.apache.groovy-base.gradle
@@ -47,16 +47,16 @@ if (sharedConfiguration.hasCodeCoverage.get()) {
     pluginManager.apply(JacocoPlugin)
 }
 
-def groovyLibrary = project.extensions.create("groovyLibrary", 
GroovyLibraryExtension, sharedConfiguration, java)
+def groovyLibrary = project.extensions.create('groovyLibrary', 
GroovyLibraryExtension, sharedConfiguration, java)
 
 java {
     withSourcesJar()
     withJavadocJar()
 }
 
-def generateReleaseInfo = tasks.register("generateReleaseInfo", 
ReleaseInfoGenerator)
+def generateReleaseInfo = tasks.register('generateReleaseInfo', 
ReleaseInfoGenerator)
 
-def groovydocJar = tasks.register("groovydocJar", Jar) {
+def groovydocJar = tasks.register('groovydocJar', Jar) {
     from groovydoc
     archiveClassifier = 'groovydoc'
     group = 'build'
@@ -70,7 +70,7 @@ configurations {
         attributes {
             attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, 
Category.DOCUMENTATION))
             attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, 
Bundling.EXTERNAL))
-            attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, 
"groovydoc"))
+            attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, 
'groovydoc'))
             attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 
Usage.JAVA_RUNTIME))
         }
         outgoing {
@@ -86,7 +86,7 @@ configurations {
             attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, 
Category.DOCUMENTATION))
             attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, 
Bundling.EXTERNAL))
             attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, 
DocsType.SOURCES))
-            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 
"aggregation"))
+            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 
'aggregation'))
         }
         outgoing {
             sourceSets.main.java.srcDirs.each {
@@ -104,7 +104,7 @@ configurations {
         attributes {
             attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, 
Category.LIBRARY))
             attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, 
Bundling.EXTERNAL))
-            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 
"javadocClasspath"))
+            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 
'javadocClasspath'))
         }
         outgoing {
             artifact tasks.named('jar')
@@ -112,12 +112,12 @@ configurations {
     }
     codenarc {
         resolutionStrategy.dependencySubstitution {
-            substitute module("org.codehaus.groovy:groovy") using project(":")
-            substitute module("org.codehaus.groovy:groovy-ant") using 
project(":groovy-ant")
-            substitute module("org.codehaus.groovy:groovy-templates") using 
project(":groovy-templates")
-            substitute module("org.codehaus.groovy:groovy-xml") using 
project(":groovy-xml")
-            substitute module("org.codehaus.groovy:groovy-json") using 
project(":groovy-json")
-            substitute module("org.codehaus.groovy:groovy-groovydoc") using 
project(":groovy-groovydoc")
+            substitute module('org.codehaus.groovy:groovy') using project(':')
+            substitute module('org.codehaus.groovy:groovy-ant') using 
project(':groovy-ant')
+            substitute module('org.codehaus.groovy:groovy-xml') using 
project(':groovy-xml')
+            substitute module('org.codehaus.groovy:groovy-json') using 
project(':groovy-json')
+            substitute module('org.codehaus.groovy:groovy-groovydoc') using 
project(':groovy-groovydoc')
+            substitute module('org.codehaus.groovy:groovy-templates') using 
project(':groovy-templates')
         }
 
         exclude module: 'groovy-all'
@@ -128,7 +128,7 @@ dependencies {
     compileOnly providers.provider { 
"com.github.spotbugs:spotbugs-annotations:${versions.spotbugs}" }
 
     codenarc "org.codenarc:CodeNarc:${versions.codenarc}"
-    codenarc project(":groovy-templates")
+    codenarc project(':groovy-templates')
 
     checkstyle "com.puppycrawl.tools:checkstyle:${versions.checkstyle}"
     spotbugs "com.github.spotbugs:spotbugs:${versions.spotbugs}"
@@ -138,15 +138,16 @@ dependencies {
 }
 
 def excludedFromManifest = [
-        'Ant-Version',
-        'Originally-Created-By',
-        'Bnd-LastModified',
-        'Created-By'
+    'Ant-Version',
+    'Bnd-LastModified',
+    'Created-By',
+    'Originally-Created-By',
+    'Tool'
 ]
 
 tasks.named('jar') {
     archiveAppendix = 'raw'
-    archiveClassifier.set("raw")
+    archiveClassifier.set('raw')
     groovyLibrary.configureManifest(manifest, excludedFromManifest)
 }
 
@@ -155,7 +156,7 @@ tasks.withType(AbstractArchiveTask).configureEach {
     reproducibleFileOrder = true
 }
 
-tasks.withType(Jar).configureEach {jar ->
+tasks.withType(Jar).configureEach { jar ->
     metaInf {
         if (jar.name == 'sourcesJar') {
             if (file("${projectDir}/LICENSE").exists()) {
@@ -177,7 +178,7 @@ tasks.withType(Jar).configureEach {jar ->
     }
 }
 
-tasks.register("jarjar", JarJarTask) {
+tasks.register('jarjar', JarJarTask) {
     from = jar.archiveFile
     repackagedLibraries.from 
configurations.runtimeClasspath.incoming.artifactView {
         componentFilter { component ->
@@ -208,9 +209,9 @@ tasks.register("jarjar", JarJarTask) {
     outputFile = tasks.named('jar').flatMap { 
layout.buildDirectory.file("libs/${it.archiveBaseName.get()}-${it.archiveVersion.get()}${(it.archiveClassifier.get()
 && it.archiveClassifier.get() != 'raw') ? '-' + it.archiveClassifier.get() : 
''}.jar") }
 
     withManifest {
-        def extras = project.name == 'groovy' ? ['Main-Class': 
'groovy.ui.GroovyMain'] : [:]
-        def moduleName = "org.apache.${project.name.replace('-', '.')}"
-        attributes('Automatic-Module-Name': moduleName, 'Bundle-Name': 'Groovy 
module: ' + project.name, *:extras)
+        String projectName = project.name
+        String autoModName = "org.apache.${projectName.replace('-','.')}"
+        attributes('Automatic-Module-Name': autoModName, 'Bundle-Name': 
"Groovy module: $projectName")
         groovyLibrary.configureManifest(it, excludedFromManifest)
         classpath = configurations.runtimeClasspath
     }
@@ -225,17 +226,17 @@ tasks.withType(Javadoc).configureEach {
     options.source = sharedConfiguration.targetJavaVersion.get()
 }
 
-tasks.named("compileTestGroovy") {
-    options.forkOptions.jvmArgs += 
["-Dspock.iKnowWhatImDoing.disableGroovyVersionCheck=true"]
+tasks.named('compileTestGroovy') {
+    options.forkOptions.jvmArgs += 
['-Dspock.iKnowWhatImDoing.disableGroovyVersionCheck=true']
 }
 
 tasks.withType(CodeNarc).configureEach {
     ignoreFailures = true
-    configFile = rootProject.file("config/codenarc/codenarc.groovy")
+    configFile = rootProject.file('config/codenarc/codenarc.groovy')
 }
 
 tasks.withType(SpotBugsTask).configureEach {
-    excludeFilter = rootProject.file("config/spotbugs/exclude.xml")
+    excludeFilter = rootProject.file('config/spotbugs/exclude.xml')
     ignoreFailures = true
     effort = Effort.valueOf('MAX')
     maxHeapSize = '2g'
@@ -250,14 +251,14 @@ tasks.withType(SpotBugsTask).configureEach {
     }
 }
 
-tasks.register("checkstyle") {
+tasks.register('checkstyle') {
     dependsOn tasks.withType(Checkstyle)
 }
 
 tasks.withType(Checkstyle).configureEach {chk ->
     showViolations = false
     ignoreFailures = true
-    configFile = rootProject.file("config/checkstyle/checkstyle.xml")
+    configFile = rootProject.file('config/checkstyle/checkstyle.xml')
     configProperties = ['rootProject.projectDir': rootProject.projectDir]
     def reportFile = 
layout.buildDirectory.file("reports/checkstyle/${name}.xml")
     reports {
@@ -271,7 +272,7 @@ tasks.withType(Checkstyle).configureEach {chk ->
         tasks.register("${name}Report", CheckstyleHtmlReport) {
             dependsOn chk
             source.from(chk.source)
-            configFile = 
rootProject.file("config/checkstyle/checkstyle-report.groovy")
+            configFile = 
rootProject.file('config/checkstyle/checkstyle-report.groovy')
             checkstyleReportFile = reportFile
             outputFile = 
layout.buildDirectory.file("reports/checkstyle/${chk.name}.html")
         }
@@ -280,8 +281,8 @@ tasks.withType(Checkstyle).configureEach {chk ->
 
 // remove below if checkstyle fix up their dependency metadata to no longer 
have conflicts
 configurations.checkstyle {
-    
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections")
 {
-        select("com.google.guava:guava:0")
+    
resolutionStrategy.capabilitiesResolution.withCapability('com.google.collections:google-collections')
 {
+        select('com.google.guava:guava:0')
     }
 }
 
@@ -317,8 +318,8 @@ def shadowRuntime = createConsumableConfiguration(objects, 
tasks, configurations
 dependencies {
     // All Groovy modules depend on the Groovy BOM which itself has 
constraints on all
     // Groovy modules, which brings nice alignment features!
-    groovyApiElements platform(project(":groovy-bom"))
-    groovyRuntimeElements platform(project(":groovy-bom"))
+    groovyApiElements platform(project(':groovy-bom'))
+    groovyRuntimeElements platform(project(':groovy-bom'))
 }
 component.addVariantsFromConfiguration(shadowApi) {
 
diff --git a/build-logic/src/main/groovy/org.apache.groovy-core.gradle 
b/build-logic/src/main/groovy/org.apache.groovy-core.gradle
index a669c72e95..c647fafabb 100644
--- a/build-logic/src/main/groovy/org.apache.groovy-core.gradle
+++ b/build-logic/src/main/groovy/org.apache.groovy-core.gradle
@@ -104,7 +104,7 @@ sourceSets {
     }
 }
 
-def dgmConverter = tasks.register("dgmConverter", DgmConverter) {
+def dgmConverter = tasks.register('dgmConverter', DgmConverter) {
     classpath.from files(compileJava, configurations.compileClasspath)
     sources.from('src/main').include('**/*GroovyMethods.java')
 }
@@ -117,24 +117,22 @@ tasks.named('jar') {
     from dgmConverter
 }
 
-tasks.named('jarjar') { JarJarTask it ->
+tasks.named('jarjar') { JarJarTask jjt ->
     def groovyBundleVersion = sharedConfiguration.groovyBundleVersion.get()
-    it.withManifest {
-        version = groovyBundleVersion
+    jjt.withManifest {
         instruction '-nouses', 'true'
         instruction 'Export-Package', "*;version=${groovyBundleVersion}"
-        instruction 'Eclipse-ExtensibleAPI', 'true'
     }
 }
 
 // Gradle classloading magic with Groovy will only work if it finds a *jar*
 // on classpath. This "bootstrap jar" contains the minimal compiler, without 
.groovy compiled files
 
-def bootstrapJar = tasks.register("bootstrapJar", Jar) {
+def bootstrapJar = tasks.register('bootstrapJar', Jar) {
     from compileJava
     from dgmConverter
 
-    destinationDirectory = layout.buildDirectory.dir("bootstrap")
+    destinationDirectory = layout.buildDirectory.dir('bootstrap')
     archiveClassifier = 'bootstrap'
 }
 
diff --git a/build-logic/src/main/groovy/org.apache.groovy-library.gradle 
b/build-logic/src/main/groovy/org.apache.groovy-library.gradle
index 44ee89f65a..ab2144e1b2 100644
--- a/build-logic/src/main/groovy/org.apache.groovy-library.gradle
+++ b/build-logic/src/main/groovy/org.apache.groovy-library.gradle
@@ -16,6 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+
 import org.apache.groovy.gradle.JarJarTask
 
 plugins {
@@ -29,23 +30,19 @@ dependencies {
     testImplementation testFixtures(project(":"))
 }
 
-tasks.named('jarjar') { JarJarTask it ->
+tasks.named('jarjar') { JarJarTask jjt ->
     def groovyBundleVersion = sharedConfiguration.groovyBundleVersion.get()
-    def symbolicName = project.name
-    it.withManifest {
-        version = groovyBundleVersion
+    jjt.withManifest {
         instruction '-nouses', 'true'
         instruction 'Export-Package', "*;version=${groovyBundleVersion}"
-        instruction 'Fragment-Host', 'groovy'
+        instruction 'Fragment-Host', 'groovy' // GROOVY-9402, GROOVY-11570
         def folder = file("${projectDir}/src/main/resources/META-INF/services")
-        if (folder.exists()) {
-            if (folder.listFiles().count { it.name ==~ 
/^(?!(org.codehaus.groovy.transform.ASTTransformation)$).*$/ } > 0) {
-                instruction 'Require-Capability', 
'osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)"'
-                instruction 'Require-Capability', 
'osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)"'
-                
folder.eachFileMatch(~/^(?!(org.codehaus.groovy.transform.ASTTransformation)$).*$/)
 {
-                    instruction 'Require-Capability', 
"osgi.serviceloader;filter:=\"(osgi.serviceloader=${it.name})\";cardinality:=multiple"
-                    instruction 'Provide-Capability', 
"osgi.serviceloader;osgi.serviceloader=\"${it.name}\""
-                }
+        if (folder.exists() && folder.listFiles().count { it.name ==~ 
/^(?!(org.codehaus.groovy.transform.ASTTransformation)$).*$/ } > 0) {
+            instruction 'Require-Capability', 
'osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)"'
+            instruction 'Require-Capability', 
'osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)"'
+            
folder.eachFileMatch(~/^(?!(org.codehaus.groovy.transform.ASTTransformation)$).*$/)
 {
+                instruction 'Require-Capability', 
"osgi.serviceloader;filter:=\"(osgi.serviceloader=${it.name})\";cardinality:=multiple"
+                instruction 'Provide-Capability', 
"osgi.serviceloader;osgi.serviceloader=\"${it.name}\""
             }
         }
     }
diff --git 
a/build-logic/src/main/groovy/org/apache/groovy/gradle/GroovyLibraryExtension.groovy
 
b/build-logic/src/main/groovy/org/apache/groovy/gradle/GroovyLibraryExtension.groovy
index c306b1a61b..68fc48b589 100644
--- 
a/build-logic/src/main/groovy/org/apache/groovy/gradle/GroovyLibraryExtension.groovy
+++ 
b/build-logic/src/main/groovy/org/apache/groovy/gradle/GroovyLibraryExtension.groovy
@@ -20,6 +20,7 @@ package org.apache.groovy.gradle
 
 import groovy.transform.CompileStatic
 import org.gradle.api.Action
+import org.gradle.api.Project
 import org.gradle.api.Task
 import org.gradle.api.artifacts.Configuration
 import org.gradle.api.artifacts.ConfigurationContainer
@@ -60,20 +61,20 @@ class GroovyLibraryExtension {
     final JavaPluginExtension javaPluginExtension
     final SoftwareComponentContainer components
     final ConfigurationContainer configurations
-    final TaskContainer tasks
+    private final String projectName
     final ProjectLayout layout
+    final TaskContainer tasks
 
     @Inject
     GroovyLibraryExtension(ObjectFactory factory,
-                           ProjectLayout layout,
                            SharedConfiguration sharedConfiguration,
                            JavaPluginExtension javaPluginExtension,
                            SoftwareComponentContainer components,
                            ConfigurationContainer configurations,
+                           Project project, ProjectLayout layout,
                            TaskContainer tasks
     ) {
         this.objects = factory
-        this.layout = layout
         this.sharedConfiguration = sharedConfiguration
         this.includeInGroovyAll = factory.property(Boolean).convention(true)
         this.grooid = factory.property(Boolean).convention(false)
@@ -82,6 +83,8 @@ class GroovyLibraryExtension {
         this.javaPluginExtension = javaPluginExtension
         this.components = components
         this.configurations = configurations
+        this.projectName = project.name
+        this.layout = layout
         this.tasks = tasks
     }
 
@@ -192,7 +195,7 @@ class GroovyLibraryExtension {
     void configureManifest(Manifest manifest, List<String> exclusions) {
         manifest.from(createBaseManifest()) { ManifestMergeSpec spec ->
             spec.eachEntry { ManifestMergeDetails details ->
-                if (exclusions.any { it == details.key }) {
+                if (exclusions.contains(details.getKey())) {
                     details.exclude()
                 }
             }
@@ -201,25 +204,24 @@ class GroovyLibraryExtension {
 
     private Manifest createBaseManifest() {
         def groovyBundleVersion = sharedConfiguration.groovyBundleVersion.get()
-        javaPluginExtension.manifest { Manifest mn ->
-            mn.attributes(
-                    'Extension-Name': 'groovy',
-                    'Specification-Title': 'Groovy: a powerful, multi-faceted 
language for the JVM',
-                    'Specification-Version': groovyBundleVersion,
-                    'Specification-Vendor': 'The Apache Software Foundation',
-                    'Implementation-Title': 'Groovy: a powerful, multi-faceted 
language for the JVM',
-                    'Implementation-Version': groovyBundleVersion,
-                    'Implementation-Vendor': 'The Apache Software Foundation',
-                    'Bundle-ManifestVersion': '2',
-                    'Bundle-Description': 'Groovy Runtime',
-                    'Bundle-License': 'Apache-2.0',
-                    'Bundle-Version': groovyBundleVersion,
-                    'Bundle-Vendor': 'The Apache Software Foundation',
-                    'Bundle-ClassPath': '.',
-                    'Eclipse-BuddyPolicy': 'dependent',
-                    'DynamicImport-Package': '*')
+        javaPluginExtension.manifest {
+            attributes(
+                'Bundle-ManifestVersion': '2',
+                'Bundle-Description'    : 'Groovy Runtime',
+                'Bundle-Vendor'         : 'The Apache Software Foundation',
+                'Bundle-Version'        : groovyBundleVersion,
+                'Bundle-License'        : 'Apache-2.0',
+                'Specification-Title'   : 'Groovy: a powerful, multi-faceted 
language for the JVM',
+                'Specification-Vendor'  : 'The Apache Software Foundation',
+                'Specification-Version' : groovyBundleVersion,
+                'Implementation-Title'  : 'Groovy: a powerful, multi-faceted 
language for the JVM',
+                'Implementation-Vendor' : 'The Apache Software Foundation',
+                'Implementation-Version': groovyBundleVersion
+            )
+            if (projectName == 'groovy') {
+                attributes('Main-Class': 'groovy.ui.GroovyMain')
+            }
         }
-
     }
 
     class ModuleDescriptorSpec {
@@ -227,11 +229,11 @@ class GroovyLibraryExtension {
         String staticExtensionClasses = ''
 
         private void build() {
-            def moduleDescriptor = tasks.register("moduleDescriptor", 
WriteExtensionDescriptorTask) {
-                it.extensionClasses = extensionClasses
-                it.staticExtensionClasses = staticExtensionClasses
+            def moduleDescriptor = tasks.register('moduleDescriptor', 
WriteExtensionDescriptorTask) { t ->
+                t.extensionClasses = extensionClasses
+                t.staticExtensionClasses = staticExtensionClasses
             }
-            tasks.named("processResources") { Task t ->
+            tasks.named('processResources') { Task t ->
                 t.dependsOn(moduleDescriptor)
             }
         }
diff --git 
a/build-logic/src/main/groovy/org/apache/groovy/gradle/JarJarTask.groovy 
b/build-logic/src/main/groovy/org/apache/groovy/gradle/JarJarTask.groovy
index 8f661b3518..1bb7c20ced 100644
--- a/build-logic/src/main/groovy/org/apache/groovy/gradle/JarJarTask.groovy
+++ b/build-logic/src/main/groovy/org/apache/groovy/gradle/JarJarTask.groovy
@@ -18,7 +18,6 @@
  */
 package org.apache.groovy.gradle
 
-import groovy.transform.CompileStatic
 import org.gradle.api.Action
 import org.gradle.api.DefaultTask
 import org.gradle.api.file.ConfigurableFileCollection
@@ -42,7 +41,7 @@ class JarJarTask extends DefaultTask {
     private final static String JARJAR_CLASS_NAME = 
'com.eed3si9n.jarjar.JarJarTask'
 
     @Internal
-    String description = "Repackages dependencies into a shaded jar"
+    String description = 'Repackages dependencies into a shaded jar'
 
     private List<Action<? super Manifest>> manifestTweaks = []
 
@@ -145,7 +144,7 @@ class JarJarTask extends DefaultTask {
             }
 
             if (createManifest) {
-                // next step is to generate an OSGI manifest using the newly 
repackaged classes
+                // next step is to generate an OSGi manifest using the newly 
repackaged classes
                 def mf = project.rootProject.extensions.osgi.osgiManifest {
                     symbolicName = project.name
                     instruction 'Import-Package', '*;resolution:=optional'
@@ -169,16 +168,9 @@ class JarJarTask extends DefaultTask {
                 it.into(outputFile.parentFile)
                 it.rename { outputFile.name }
             }
-            project.ant.jar(destfile: outputFile, update: true, index: true, 
manifest: manifestFile, modificationtime: tstamp) {
-                manifest {
-                    // because we don't want to use JDK 1.8.0_91, we don't 
care and it will
-                    // introduce cache misses
-                    attribute(name: 'Created-By', value: 'Gradle')
-                }
+            project.ant.jar(destfile: outputFile, index: true, manifest: 
manifestFile, modificationtime: tstamp, update: true) {
                 if (untouchedFiles) {
-                    zipfileset(
-                            src: originalJar,
-                            includes: untouchedFiles.join(','))
+                    zipfileset(src: originalJar, includes: 
untouchedFiles.join(','))
                 }
             }
         } finally {
@@ -188,7 +180,6 @@ class JarJarTask extends DefaultTask {
         }
     }
 
-    @CompileStatic
     private static String baseName(File file) {
         file.name.substring(0, file.name.lastIndexOf('-'))
     }

Reply via email to