Java 如何为多个项目创建Gradle sharedManifest?

Java 如何为多个项目创建Gradle sharedManifest?,java,groovy,gradle,java-ee-7,build.gradle,Java,Groovy,Gradle,Java Ee 7,Build.gradle,我有多个java项目。这些项目正在使用gradle创建jar、war和ear文件。在每个项目中,我都使用manifest文件来维护元数据,如版本、日期和时间。。。 为此,我在每个build.gradle文件中都包含了清单文件创建逻辑 manifest { attributes( 'Bundle-Vendor' : "$BUNDLE_VENDOR", 'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"))

我有多个java项目。这些项目正在使用gradle创建jar、war和ear文件。在每个项目中,我都使用manifest文件来维护元数据,如版本、日期和时间。。。 为此,我在每个build.gradle文件中都包含了清单文件创建逻辑

manifest {
     attributes( 
    'Bundle-Vendor' : "$BUNDLE_VENDOR",
    'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")) 
}
但在Gradle中有一个功能调用sharedManifest。我在主项目build.gradle脚本中定义了以下两个任务。但是在每个jar和war文件中都有由Gradle创建的默认MANIFEST.MF文件

ext.sharedManifest = manifest {

    attributes( 
        'Bundle-Vendor' : "$BUNDLE_VENDOR", 
         'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
     ) 
}

task fooJar(type: Jar) {
    manifest = project.manifest {
        from sharedManifest
    }
}

task fooWar(type: War) {
    manifest = project.manifest {
        from sharedManifest
    }
}
jar.manifest.writeTo(“/manifest.MF”) war.manifest.writeTo(“/manifest.MF”)


请有人给出建议如何做到这一点。

在构建中共享清单逻辑的最简单方法是配置规则,例如:

allprojects {
    tasks.withType(Jar) { // includes War and Ear
        manifest {
            attributes ...
        }
    }
}

另外,还有另一种创建共享清单的方法:

创建java.gradle文件以保留java子项目的配置,并将其放入:

ext.sharedManifest = manifest {
    attributes(
.......
    )
}
然后,在root build.gradle中将此配置应用于子项目

subprojects {
    apply from: "$rootDir/gradle/java.gradle"
.....
}
还可以重用此共享清单并添加额外属性:

次级项目A:

jar {
    manifest {
        from sharedManifest
        attributes(
                'JavaFX-Application-Class': 'com.main.SomeClass',
.....
        )
    }
}

我在我的主project build.gradle文件中添加了这段代码,如下所示:allprojects{tasks.withType(War){manifest{attributes('Bundle-Vendor':“$Bundle\u Vendor”,'build Time':new Date().format(“yyyyy-MM-dd'T'HH:MM:ssZ”)}但它是清单文件,我只能看到清单版本:1.0您的代码片段对我来说很好。您可能在错误的位置查找(请注意,您使用了不包括jar和ear的
with type(War)
),或者您的构建有其他问题。嗨,Peter,如果我使用上述代码片段,我是否要使用War.manifest.writeTo(“/manifest.MF”)将清单写入子项目,或者它将自动覆盖默认清单文件。在我的情况下,我无法覆盖或替换默认清单文件。