2012-04-27 21 views
10

के साथ एकाधिक आर्किटेक्चर एसडब्ल्यूटी एप्लिकेशन बनाएं मैंने एक एसडब्ल्यूटी एप्लीकेशन के लिए एक मेवेन प्रोजेक्ट स्थापित किया है। यह एप्लिकेशन कई प्लेटफार्मों (ओएस एक्स, विंडोज 64-बिट, विंडोज 32-बिट, लिनक्स 64-बिट और लिनक्स 32-बिट) पर चलता है और मैंने इसे सेट अप किया है ताकि मंच का पता चल जाए जब मैवेन चलाया जाता है और पैक किया जाता है आवेदन विभिन्न गंतव्य निर्देशिकाओं पर जाता है। यहाँ pom.xml से प्रासंगिक भागों इस लक्ष्य को हासिल करने के लिए कर रहे हैं:मैवेन

<profiles> 
    <profile> 
    <id>linux_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>amd64</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/linux_x86_64</directory> 
    </build> 
    </profile> 

    <profile> 
    <id>win32_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>i386</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/win32_x86_64</directory> 
    </build> 
    </profile> 
    ... 
</profiles> 

और SWT के लिए इस्तेमाल किया निर्भरता यह है:

<dependencies> 
    <dependency> 
    <groupId>org.eclipse</groupId> 
    <artifactId>swt</artifactId> 
    <version>3.7.2.v3740</version> 
    </dependency> 
... 
</dependencies> 

बातें स्पष्ट, मैं अपने स्थानीय भंडार SWT में स्थापित किया है करने के लिए डमी पैकेज (org.eclipse.swt_3.7.2.v3740f.jar) और सभी प्लेटफ़ॉर्म-विशिष्ट वाले (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f, आदि)।

जिस तरह से मैं निर्भरता पैक करता हूं वह मैवेन-निर्भरता-प्लगइन का उपयोग करके "lib" फ़ोल्डर के साथ होता है और मैवेन एसडब्ल्यूटी डमी पैकेज और प्लेटफार्म-विशिष्ट मशीन दोनों को कॉपी करने के लिए पर्याप्त स्मार्ट है जहां मैं पैकेजिंग कर रहा हूं आवेदन। अब तक बहुत अच्छा ...

समस्या यह है कि मैं एक ही मशीन से विभिन्न प्लेटफॉर्म के लिए एप्लिकेशन को संकलित करना चाहता हूं। मैं इसे कैसे प्राप्त करूं?

मैं (Windows 64-बिट के लिए उदाहरण) इस तरह, एक मंच के लिए आवश्यक SWT जार के साथ प्रत्येक प्रोफ़ाइल में एक संपत्ति की स्थापना की कोशिश की है:

<properties> 
    <swt.artifactId>swt.win32.x86_64</swt.artifactId> 
    <swt.version>3.7.2</swt.version> 
</properties> 

लेकिन इस दृष्टिकोण दोनों प्रोफ़ाइल- लेने विशिष्ट SWT जार और प्लेटफ़ॉर्म-विशिष्ट एक मैं कहाँ चल रहा हूँ Maven "lib" निर्देशिका में कॉपी हो, तीन जार के साथ समाप्त:

  • SWT-3.7.2.v3740.jar
  • SWT .gtk.linux.x86_64-3.7.2.jar
  • swt.win32.x86_64-3.7.2.jar

वहाँ एक रास्ता है, जिसमें मैं मशीन मैं कहाँ हूँ अनदेखी एक प्रोफ़ाइल निर्दिष्ट कर सकते है इसे चला रहा है ताकि मुझे अपने एसडब्ल्यूटी जार को मैन्युअल रूप से हटाने की आवश्यकता न हो?

अग्रिम धन्यवाद।

उत्तर

2

लेकर सुनिश्चित नहीं हैं depency-प्लगइन यह संभालती है, लेकिन अगर आप सिर्फ एक ही निर्भरता इस तरह है कि यह काम करना चाहिए:

<dependency> 
     <groupId>${swt.groupId}</groupId> 
     <artifactId>${swt.artifactId}</artifactId> 
     <version>3.7.2</version> 
     <scope>compile</scope> 
    </dependency> 

और फिर इस तरह के प्रोफाइल:

<profile> 
    <id>gtk_linux_x86_64</id> 
    <activation> 
    <os> 
     <name>linux</name> 
     <arch>x86_64</arch> 
    </os> 
    </activation> 
    <properties> 
    <swt.groupId>org.eclipse.swt.gtk.linux</swt.groupId> 
    <swt.artifactId>x86_64</swt.artifactId> 
    </properties> 
</profile> 

अब एसडब्ल्यूटी के आवश्यक संस्करण को स्वचालित रूप से उपयोग किया जाता है, लेकिन आपको जो चाहिए उसे सेट किया जा सकता है (उदाहरण के लिए रिलीज का निर्माण करते समय):

mvn -P gtk_linux_x86_64

नोट: आवश्यकतानुसार अपने समूह आईडी और artifactId बदलें।

+0

वही है जो मैंने पहले कोशिश की थी और परिणाम मेरे मूल प्रश्न में वर्णित लोगों के समान ही हैं। ऐसा लगता है कि इससे कोई फर्क नहीं पड़ता कि, मैवेन सिस्टम के एसडब्ल्यूटी जार को पैकेज करता है जहां यह चल रहा है। – Alf

+0

यह सुनकर खेद है, आप इसे एक कोशिश करना चाहेंगे: http://mchr3k.github.com/swtjar/ – hennr

+0

धन्यवाद, मैं निश्चित रूप से इसे आज़मा दूंगा, हालांकि मुझे संदेह है कि मैवेन पैकेज करने का प्रयास करेगा मेजबान से पुस्तकालय कोई फर्क नहीं पड़ता कि क्या। मैं तुम्हें तैनात रखेंगे। – Alf