2015-10-01 8 views
5

Nel mio file build.gradle ho bisogno di aggiungere la riga:Grado di plugin shadow: cosa fa mergeServiceFiles()?

shadowJar { 
    mergeServiceFiles() 
} 

In caso contrario, il vaso non funziona correttamente. Mi chiedo cosa faccia esattamente questa linea? Uso il plugin Gradle in Eclipse Luna. Creo il jar su un progetto Java che dipende da un altro.

risposta

1

Perché non lo indaga in codice da solo? mergeServiceFiles viene dichiarato esattamente here e la sua attuazione è il seguente:

/** 
* Syntactic sugar for merging service files in JARs 
* @return 
*/ 
public ShadowJar mergeServiceFiles() { 
    try { 
     transform(ServiceFileTransformer.class); 
    } catch (IllegalAccessException e) { 
    } catch (InstantiationException e) { 
    } 
    return this; 
} 

Come si può vedere si utilizza ServiceFileTransfomer che è definita here. Dai suoi documenti:

modificati rispetto org.apache.maven.plugins.shade.resource.ServiceResourceTransformer.java

Risorse trasformatore che aggiunge le voci nei servizi di risorse META-INF/in un'unica risorsa. Ad esempio, se ci sono diverse risorse META-INF/services/org.apache.maven.project.ProjectBuilder distribuite su molti JAR, le singole voci saranno tutte concatenate in un singolo META-INF/services/org.apache. maven.project.ProjectBuilder resource impacchettato nel JAR risultante prodotto dal processo di ombreggiatura.