2017-06-27 5 views
7

मेरे पास 8 बाल परियोजनाओं के साथ एक ग्रेडल प्रोजेक्ट है और एक "सभी" जार बनाने के लिए एक कॉन्फ़िगर किया गया शैडोजर कार्य है। उच्चस्तरीय परियोजना अपने सभी बच्चों के लिए निर्भरता के लिए सेटअप है, इस shadowjar क्या शामिल करने के लिए कहता है:शेडजर कार्य को कैसे बढ़ाया जाए इसके स्रोतों और अपने बच्चों के जावदोक भी बनाते हैं?

project(':') { 
    dependencies { 
     compile project(':jfxtras-agenda') 
     compile project(':jfxtras-common') 
     compile project(':jfxtras-controls') 
     compile project(':jfxtras-icalendarfx') 
     compile project(':jfxtras-icalendaragenda') 
     compile project(':jfxtras-menu') 
     compile project(':jfxtras-gauge-linear') 
     compile project(':jfxtras-font-roboto') 
    } 
} 

shadowJar { 
    classifier = null // do not append "-all", so the generated shadow jar replaces the existing jfxtras-all.jar (instead of generating jfxtras-all-all.jar) 
} 

यह ठीक काम करता है, लेकिन Maven केंद्रीय सभी जार इंकार कर रहा है, क्योंकि यह एक संबद्ध स्रोतों और javadocs नहीं है जार।

मैं स्रोतों और जावाडोक को उत्पन्न करने के लिए धीरे-धीरे कैसे कहूं? छायाजार के दस्तावेज का कहना है कि इसे डिफ़ॉल्ट रूप से करना चाहिए।

+0

क्या आपको छाया जार से मेवेन सेंट्रल तक जावाडोक जार उत्पन्न करने और अपलोड करने का उत्तर मिला? मैं भी जानना चाहता हूँ! – Jorn

+2

नहीं। यह अभी भी एक बात है। गंभीर रूप से मैवेन पर वापस जाने पर विचार करने पर विचार करें, विशेष रूप से जावा 9 और ग्रहण एकीकरण के साथ अभी भी इतनी छोटी है। – tbeernot

+1

आप केवल 'शैडोजर' प्लगइन द्वारा बनाई गई वसा-जार में बाहरी प्रॉपर्टीज पर नहीं, बल्कि अपनी स्थानीय परियोजना निर्भरताओं को शामिल कर रहे हैं? यदि ऐसा है, तो मुझे संदेह है कि आपको 'छायाजार' की ज़रूरत है। आप शायद साधारण जार कार्यों को बना सकते हैं, जो सब-प्रोजेक्ट के संकलन, स्रोत और जावाडोक कार्यों के आउटपुट में ले जाते हैं और खुद को एक वसा-जार बनाते हैं। – dpr

उत्तर

4

छाया प्लगइन में वसा स्रोत/जावाडॉक्स जार बनाने की सुविधा नहीं है।

नीचे, मैं कुछ छोटे कार्य (javadocJar और sourcesJar) प्रदान करता हूं जो वसा जावाडोक और स्रोत जार का निर्माण करेगा। वे shadowJar के बाद हमेशा निष्पादित होने के लिए जुड़े हुए हैं। लेकिन छाया छाया प्लगइन पर इसकी कोई निर्भरता नहीं है।

subprojects { 
    apply plugin: 'java' 
} 

// Must be BELOW subprojects{} 
task alljavadoc(type: Javadoc) { 
    source subprojects.collect { it.sourceSets.main.allJava } 
    classpath = files(subprojects.collect { it.sourceSets.main.compileClasspath }) 
    destinationDir = file("${buildDir}/docs/javadoc") 
} 

task javadocJar(type: Jar, dependsOn: alljavadoc) { 
    classifier = 'javadoc' 
    from alljavadoc.destinationDir 
} 

task sourcesJar(type: Jar) { 
    classifier = 'sources' 
    from subprojects.collect { it.sourceSets.main.allSource } 
} 

shadowJar.finalizedBy javadocJar 
shadowJar.finalizedBy sourcesJar 

ध्यान दें, subprojects अनुभाग आवश्यक है, भले ही आप पहले से ही अपने उप अंदर java प्लगइन लागू होते हैं।

यह भी ध्यान दें, इसमें तीसरे पक्ष के पुस्तकालयों के जावाडॉक्स शामिल नहीं हैं जो आपके उपप्रोजेक्ट्स पर निर्भर हो सकते हैं। लेकिन आमतौर पर आप इसे वैसे भी नहीं करना चाहेंगे, शायद।

+0

मैं एक आशंका लेगा, लेकिन असली काम – tbeernot

+0

ठीक है, यह एक चेतावनी के साथ बहुत करीब है: जेएफएक्सट्रैस जावडोक उत्पन्न करने के लिए एसिडिडलेट का उपयोग करता है। तो thje Javadoc पीढ़ी विफल रहता है क्योंकि डॉक्टर को सामान्य जावाडोक इंजन द्वारा पार्स नहीं किया गया था। लाइन 144 देखें https://github.com/JFXtras/jfxtras/blob/8.0/build.gradle – tbeernot

+0

त्रुटि संदेश दिखाएं। यह भी ध्यान दें, मेरे उदाहरण में कार्य subprojects खंड के बाहर हैं। आपकी फाइल में वे अंदर हैं। –

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