2016-06-22 23 views
8

Vorrei incorporare le informazioni sulle dipendenze nel mio file manifest, in modo da poter esporre queste informazioni in fase di runtime. Ad esempio, posso vedere quale versione di una libreria è utilizzata da una particolare istanza in esecuzione del mio servizio.utilizza gradle per incorporare le informazioni sulle dipendenze nel manifest

sto usando Gradle per costruire il mio 'fatjar':

shadowJar { 
    mergeServiceFiles() 
    archiveName "service.jar" 
    exclude "META-INF/*.SF" 
    exclude "META-INF/*.DSA" 
    exclude "META-INF/*.RSA" 
    manifest { 
    attributes('Main-Class': "service.Service", 
       'Built-By': System.getProperty('user.name'), 
       'Built-Date': new Date(), 
       'Built-JDK': System.getProperty('java.version'), 
       'Implementation-Version': version, 
       'Implementation-Title': project.name) 
    } 
} 

E ho dipendenze da diverse altre librerie:

dependencies { 
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.39' 
    ... 
} 

Come posso aggiungere le informazioni sulle dipendenze nel mio file manifesto ? Per esempio:

Manifest-Version: 1.0 
Implementation-Title: service 
Implementation-Version: Local Build 
Built-By: me 
Built-Date: Wed Jun 22 14:13:53 BST 2016 
Built-JDK: 1.8.0_91 
Main-Class: service.Service 
Dependency-mysql-connector-java: mysql:mysql-connector-java:5.1.39 

risposta

4

Può essere fatto nel modo seguente:

buildscript { 
    repositories { 
    maven { 
     url 'https://plugins.gradle.org/m2/' 
    } 
    } 

    dependencies { 
    classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' 
    } 
} 

apply plugin: 'java' 
apply plugin: 'com.github.johnrengelman.shadow' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'com.google.guava:guava:19.0' 
    compile 'com.google.inject:guice:4.1.0' 
} 

shadowJar { 
    mergeServiceFiles() 
    archiveName "service.jar" 
    exclude "META-INF/*.SF" 
    exclude "META-INF/*.DSA" 
    exclude "META-INF/*.RSA" 
    manifest { 
    attributes(
       [ 
       'Main-Class': "service.Service", 
       'Built-By': System.getProperty('user.name'), 
       'Built-Date': new Date(), 
       'Built-JDK': System.getProperty('java.version'), 
       'Implementation-Version': 'version', 
       'Implementation-Title': project.name, 
       ] + 
       project.configurations.compile.allDependencies.collect { d -> 
       [ 
        ("dependency-${d.group.replaceAll('\\.','-')}".toString()):"$d.group:$d.name:$d.version" 
       ] 
       }.sum() 
    ) 
    } 
} 

Lo script precedente produce il seguente MANIFEST.MF:

Manifest-Version: 1.0 
Main-Class: service.Service 
Built-By: opal 
Built-Date: Mon Jul 04 17:27:05 CEST 2016 
Built-JDK: 1.8.0_91 
Implementation-Version: version 
Implementation-Title: 37969253 
dependency-com-google-guava: com.google.guava:guava:19.0 
dependency-com-google-inject: com.google.inject:guice:4.1.0 

Dal attributes prende Map come argomento, è è necessario raccogliere le dipendenze, trasformarle in Map e sommare le mappe.

+0

Sembra fantastico: c'è anche un modo per includere le dipendenze anche dai miei sottomoduli? Cioè, ho un modulo 'core' e un modulo 'servizio', e le mie librerie sono tutte nel core - stanno attualmente mostrando come dipendenza-core: service: Service: Local Build –

Problemi correlati