मेरे पास एक प्रोजेक्ट a:jar
के साथ एक प्रोजेक्ट है जिसके लिए निर्भरता के एक अलग सेट की आवश्यकता है, यह निर्भर करता है कि यह किस प्लेटफॉर्म को संकलित किया गया है। कोड सभी प्लेटफार्मों के लिए समान है। जैसे एंड्रॉइड पर httpcomponents लाइब्रेरी पहले ही ओएस के साथ बंडल की गई है, जबकि मुझे इसे जे 2 एसई वातावरण के लिए बनाने के लिए शामिल करना है। मेरे पास एक और सबमिशन भी है, जो कई submodules और उनकी निर्भरताओं को एक संग्रह में इकट्ठा करता है। संबंधित मंच के लिए संकलित सभी submodules, और उस प्लेटफॉर्म के लिए उपयुक्त उनकी निर्भरताओं को लेने के लिए, मैं असेंबली सबमिशन को विश्वसनीय रूप से कॉन्फ़िगर कैसे कर सकता हूं?विभिन्न प्लेटफार्मों के लिए बनाता है मेवेन मार्ग
मैंने a:jar:android
और a:jar:j2se
बनाने के लिए प्रोफाइल का उपयोग करने का प्रयास किया। हालांकि, इनमें से किसी एक पर निर्भरता घोषित करने से असेंबली में अजीब निर्भरताएं आती हैं। I.e, असेंबली प्रोजेक्ट के dependency:tree
में कभी-कभी a:jar:j2se
पर निर्भरता शामिल होगी (इससे कोई फर्क नहीं पड़ता कि मैंने असेंबली में a:jar:android
या a:jar:j2se
का उपयोग करने की घोषणा की है), और कभी-कभी अन्य। स्थानीय भंडार में a
के जार अपडेट करने के बाद यह अक्सर बदल गया (अक्सर)। असेंबली प्रोजेक्ट में स्विचिंग प्रोफाइल का भी उपयोग करता है।
मैं उस by applying the same dependencies to the assembly project's profiles को हल कर सकता हूं जैसा कि व्यक्तिगत submodules प्रोफ़ाइल द्वारा आवश्यक है। लेकिन जैसा कि मुझे पीओएम में खुद को दोहराना है, शायद यह हासिल करने के लिए एक और अधिक मैवेन-वाई तरीका है। जैसा कि मैं मैवेन के लिए काफी नया हूं, मुझे आश्चर्य है कि यह क्या है? मैं कोड को डुप्लिकेट नहीं करना चाहता (जो कोड के समान रहता है और भी दोहराना होगा) और मैं पीओएम के हिस्सों को डुप्लिकेट करना पसंद नहीं करता क्योंकि उन्हें संस्करण उन्नयन के कारण बदलना जटिल हो सकता है।
कुछ ठोस सामग्री: a:jar
के पोम से निर्भरता:
<dependencies>
.....
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
<!-- Exclusion in the common part, they are provided in the profiles from different sources -->
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
....
</exclusions>
</dependency>
</dependencies>
<profiles>
<profile>
<id>android</id>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>1.6_r2</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>java</id>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
</profile>
</profiles>
विधानसभा परियोजना (जो Maven विधानसभा प्लगइन का उपयोग करता है) प्रोफाइल:
<profiles>
<profile>
<id>android</id>
<dependencies>
<dependency>
<groupId>a</groupId>
<artifactId>a</artifactId>
<version>${project.version}</version>
<classifier>android</classifier>
<type>jar</type>
</dependency>
<!-- Duplicate -->
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>1.6_r2</version>
<scope>provided</scope>
</dependency>
<!-- Duplicate -->
</dependencies>
</profile>
<profile>
<id>java</id>
<dependencies>
<!-- Duplicate -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
<scope>compile</scope>
</dependency>
<!-- /Duplicate -->
<dependency>
<groupId>a</groupId>
<artifactId>a</artifactId>
<version>${project.version}</version>
<classifier>java</classifier>
<type>jar</type>
</dependency>
</dependencies>
</profile>
</profiles>
मैं से छुटकारा पाने के लिए करना चाहते हैं चिह्नित निर्भरता घोषणाएं।
तो (3), "एक-JSE: पोम" के लिए: "एक" से विरासत हैं>http://maven.apache.org/guides/introduction/introduction-to-profiles.html
आपके मामले में यह कुछ इस तरह हो सकता है - यहाँ प्रोफाइल पर एक लेख है। "ए" के पोम में मैं किसी भी (या केवल आम) निर्भरताओं की घोषणा नहीं करता हूं। असेंबली प्रोजेक्ट में मैं "ए-जेएसई: पोम" पर निर्भर करता हूं - क्या यह सही है? यह एक अच्छा तरीका लगता है ... – Stephan
हाँ, ठीक है।मुझे लगता है कि आपको "ए" में कुछ निर्भरताओं की घोषणा करनी है क्योंकि वे संकलन के लिए आवश्यक हो सकते हैं। यही कारण है कि आपको या तो (1) या (2) करना है। साथ ही, "असेंबली" शब्द से भ्रमित न हों, यह "मेवेन असेंबली प्लगइन" से कोई लेना देना नहीं है। – kan
मैंने मूल पोस्टिंग को अधिक ठोस कोड रखने के लिए अपडेट किया। अभी मैं यह समझने की कोशिश कर रहा हूं कि कैसे "ए" और "ए-जे 2se" को एक दूसरे से सही तरीके से प्राप्त करना चाहिए। – Stephan