2013-08-12 8 views
6

के साथ एक परियोजना संकलित करना मेरे पास 3 अलग-अलग परियोजनाओं के साथ एक मल्टीप्रोजेक्ट कॉन्फ़िगरेशन है।विभिन्न जावा स्रोत संगतता

2 परियोजनाओं में से तीसरी परियोजना पर निर्भर है, जिसे मैंने 'कोर' नाम दिया है। प्रोजेक्ट के आधार पर, कोर को 1.4-1.6 के स्रोत क्रमशः, कोर-1.4.jar और कोर-1.6.jar आउटपुट में, जार को संकलित करना होगा।

क्या यह एक एकल build.gradle के साथ ऐसा करना संभव है, या ऐसा करने का सबसे अच्छा तरीका क्या होगा? मैं 2 परियोजनाओं में से प्रत्येक के लिए विशेष रूप से मेरी निर्भरताओं में कौन सा जार निर्दिष्ट कर सकता हूं?

+0

हां, लक्ष्य अनुकूलताओं को भी लक्षित करें। मैंने कोशिश की है: स्रोत कॉम्पैबिलिटी = 1.4 लक्ष्य कॉम्पैबिलिटी = 1.4 कार्य में, लेकिन यह काम नहीं करता है। लक्ष्य में से एक जावा एमई है, दूसरा एंड्रॉइड है। –

+0

वास्तव में क्या काम नहीं करता है? –

उत्तर

12

सवाल मूल रूप से उसी जावा कोड के आधार पर एक आर्टिफैक्ट के दो भिन्नताओं का उत्पादन और उपभोग करने के बारे में है। बशर्ते आपको वास्तव में दो जारों का उत्पादन करने की आवश्यकता है जो केवल उनकी लक्षित संगतता (जिसे मैं पहले पूछता हूं) में भिन्न होता हूं, इसे प्राप्त करने का एक तरीका जावा प्लगइन के main स्रोत सेट (और इसके साथ आने वाले कार्यों) का उपयोग करना है पहली भिन्नता, और दूसरा भिन्नता उत्पन्न करने के लिए एक नया स्रोत सेट। इसके अतिरिक्त, दूसरी भिन्नता को अपनी कॉन्फ़िगरेशन के माध्यम से प्रकाशित करने की आवश्यकता है ताकि परियोजनाओं के आधार पर इसका संदर्भ हो सके।

कोर/build.gradle:

apply plugin: "java" 

sourceCompatibility = 1.4 

sourceSets { 
    main1_4 { 
     def main = sourceSets.main 
     java.srcDirs = main.java.srcDirs 
     resources.srcDirs = main.resources.srcDirs 
     compileClasspath = main.compileClasspath 
     runtimeClasspath = main.runtimeClasspath 
    } 
} 

compileJava { 
    targetCompatibility = 1.6 
} 

compileMain1_4Java { 
    targetCompatibility = 1.4  
} 

jar { 
    archiveName = "core-1.6.jar" 
} 

main1_4Jar { 
    archiveName = "core-1.4.jar" 
} 

configurations { 
    archives1_4 
} 

artifacts { 
    archives1_4 main1_4Jar 
} 

आधार पर परियोजनाओं में:

dependencies { 
    compile project(":core") // depend on 1.6 version 
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version 
} 

यह सब कर सकते हैं में किया जा (लेकिन नहीं है) यह इस प्रकार दिखाई दे सकता है एक ही निर्माण लिपि। विवरण के लिए Gradle User Guide में "बहु-परियोजना निर्माण" अध्याय देखें।

+0

धन्यवाद। मेरी समस्या यह थी कि मैंने compileClasspath = सेट किया था, जिसने पथ से कोर प्रोजेक्ट के जार को हटा दिया था। इसे बदलना + = समस्या को ठीक किया गया। –

+0

बस एहसास हुआ कि मुझे अपने जवाब को पूरी तरह खत्म करने की आवश्यकता है। अब सच के बहुत करीब होना चाहिए। –

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