gpt4 book ai didi

hadoop - 如何创建不覆盖 META-INF/services 下的条目的 fat jar

转载 作者:可可西里 更新时间:2023-11-01 14:51:32 28 4
gpt4 key购买 nike

我有以下 gradle 构建配置:

plugins {
id 'com.github.johnrengelman.shadow' version '1.2.3'
}

group 'abc'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'application'
mainClassName = "abc.Driver"


repositories {
mavenCentral()
}

dependencies {
compile (group: 'org.apache.hadoop', name: 'hadoop-client', version: '2.6.0')
}

sourceSets {
main {
java {
srcDir './src'
}
}
}

jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': mainClassName
)
}
}

task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': mainClassName
}
baseName = project.name + '-all'
from { (configurations.compile - configurations.provided).collect

{
//println it.getName()
it.isDirectory() ? it : zipTree(it)
}

}
{
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
with jar
}

我的主要方法就是下面这段代码:

public static void main(String[] args) {
Iterable<ClientProtocolProvider> frameworkLoader =
ServiceLoader.load(ClientProtocolProvider.class);
for(ClientProtocolProvider cpp: frameworkLoader) {
System.out.println(cpp.toString());
}
}

当我按预期从 IDE 运行 main 方法时,我得到以下输出:

org.apache.hadoop.mapred.YarnClientProtocolProvider@4783da3f
org.apache.hadoop.mapred.LocalClientProtocolProvider@300ffa5d

但是当我运行 gradle fat jar 任务并创建 fat jar 时,在通过终端使用 (java -jar) 运行主要方法后,我得到:

org.apache.hadoop.mapred.LocalClientProtocolProvider@7f31245a

我发现在创建 fat jar 时,META-INF/services 下的条目会针对所有依赖项进行合并,因此我丢失了我需要的 YarnClientProtocolProvider 声明在我的代码中更进一步。

YarnClientProtocolProviderhadoop-mapreduce-client-jobclient.jar

中声明

LocalClientProtocolProviderhadoop-mapreduce-client-common.jar

中声明

有没有人知道如何创建一个不合并 META-INF/services 下的条目的 fat jar 子?!

最佳答案

这应该可以完成工作

shadowJar {
mergeServiceFiles()
}

关于hadoop - 如何创建不覆盖 META-INF/services 下的条目的 fat jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44595145/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com