2016-06-22 10 views
8

में निर्भरता जानकारी एम्बेड करने के लिए ग्रेडल का उपयोग करें, मैं अपनी मैनिफेस्ट फ़ाइल में निर्भरता जानकारी एम्बेड करना चाहता हूं, ताकि मैं इस जानकारी को रनटाइम पर बेनकाब कर सकूं। यानी मैं देख सकता हूं कि लाइब्रेरी का कौन सा संस्करण मेरी सेवा के एक विशेष चल रहे उदाहरण द्वारा उपयोग किया जाता है।मैनिफेस्ट

मैं Gradle उपयोग कर रहा हूँ मेरे '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) 
    } 
} 

और मैं विभिन्न अन्य पुस्तकालयों पर निर्भरता है:

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

मैं अपने मैनिफ़ेस्ट फ़ाइल में निर्भरता जानकारी जोड़ सकते हैं ? उदाहरण के लिए:

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 

उत्तर

4

यह निम्नलिखित तरीके से किया जा सकता है:

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 

attributes के बाद से एक तर्क के रूप Map लेता है, आप:

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() 
    ) 
    } 
} 

स्क्रिप्ट ऊपर निम्नलिखित MANIFEST.MF का उत्पादन उन्हें निर्भरता एकत्र करने की आवश्यकता है, उन्हें Map में बदलें और नक्शे को योग करें।

+0

यह बहुत अच्छा लग रहा है - क्या मेरे उप-मॉड्यूल से भी निर्भरता शामिल करने का कोई तरीका है? यही है, मेरे पास 'कोर' मॉड्यूल और 'सेवा' मॉड्यूल है, और मेरी लाइब्रेरी सभी कोर में हैं - वे वर्तमान में निर्भरता-कोर के रूप में दिख रहे हैं: सेवा: सेवा: स्थानीय बिल्ड –

संबंधित मुद्दे