2012-06-06 7 views
8

मेरे पास एक मेवेन मॉड्यूल है जिसे मुझे जे 2 एमई क्लाइंट और ईजेबी सर्वर में उपयोग करने की आवश्यकता है। क्लाइंट में मुझे लक्ष्य 1.1 के लिए और लक्ष्य 1.6 के लिए सर्वर में संकलित करने की आवश्यकता है।मैवेन को एक आर्टिफैक्ट के दो संस्करणों को बनाने के लिए कॉन्फ़िगर कैसे करें, प्रत्येक एक अलग लक्ष्य के लिए जेआरई

मुझे 1.6 संस्करण को नेक्सस रिपोजिटरी में भी तैनात करने की आवश्यकता है, इसलिए सर्वर प्रोजेक्ट पर काम करने वाले सदस्यों को स्रोत कोड डाउनलोड करने की आवश्यकता के बिना इस निर्भरता को शामिल किया जा सकता है।

मैंने http://java.dzone.com/articles/maven-profile-best-practices पर पढ़ा है कि प्रोफाइल का उपयोग करना ऐसा करने का सबसे अच्छा तरीका नहीं है, लेकिन लेखक ने यह नहीं कहा कि सबसे अच्छा तरीका क्या है।

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <artifactId>proj-parent</artifactId> 
     <groupId>br.com.comp.proj</groupId> 
     <version>0.0.4-SNAPSHOT</version> 
    </parent> 

    <artifactId>proj-cryptolib</artifactId> 
    <name>proj - Cryto Lib</name> 

    <dependencies> 
     <dependency> 
      <groupId>br.com.comp</groupId> 
      <artifactId>comp-proj-mobile-messages</artifactId> 
      <version>0.0.2-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 

     <plugins> 

      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.3</source> 
        <target>1.1</target> 
        <fork>true</fork> 
       </configuration> 
      </plugin> 

     </plugins> 

    </build> 

</project> 
+0

आपको सर्वर के लिए लक्ष्य 1.6 की आवश्यकता क्यों है? –

+0

@ फिलिपपेर्सशाल: मुझे नहीं पता। मैं क्लाइंट पर काम कर रहा हूं, सर्वर पर काम कर रहे अन्य सदस्यों ने कहा कि उन्हें वास्तव में इसकी आवश्यकता है। –

+0

यह वास्तव में समझ में नहीं आता है। लक्ष्य 1.1 के साथ संकलित कोड जावा 6 वीएम में ठीक काम करता है। –

उत्तर

5

आप Maven संकलक प्लगइन के माध्यम से इस कॉन्फ़िगर कर सकते हैं:

यहाँ मेरी pom.xml है।

Maven compiler plugin documentation पर एक नज़र डालें।

उदाहरण के लिए आप इसे विभिन्न प्रोफाइल के माध्यम से सक्षम कर सकते हैं।

यदि आप केवल अलग-अलग लक्ष्य संस्करण चाहते हैं तो आप आसानी से एक चर लक्ष्य का उपयोग कर सकते हैं। कुछ इस तरह:

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.3</source> 
     <target>${TARGET_VERSION}</target> 
     <fork>true</fork> 
    </configuration> 
</plugin> 
+0

यदि मैं समझ गया, तो इसका उपयोग करके मैं जावैक के दो अलग-अलग संस्करणों का उपयोग कर पाऊंगा। यह वांछित नहीं है। मैं चाहता हूं कि इस मॉड्यूल को लक्ष्य 1 के साथ संकलित किया जाए।1 जब क्लाइंट प्रोजेक्ट में और सर्वर प्रोजेक्ट में उपयोग किए जाने पर लक्ष्य 1.6 के साथ इसका उपयोग किया जाता है। हम प्रोफाइल के साथ ऐसा करने की कोशिश कर रहे थे, लेकिन मैंने पढ़ा है कि दो अलग-अलग कलाकृतियों के निर्माण के लिए प्रोफाइल का उपयोग करना एक अच्छा अभ्यास नहीं है। –

+0

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

+3

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

1

wjans 'जवाब देने के लिए मेरी टिप्पणी की मदद के लिए के रूप में आप अधिक जानकारी के लिए अनुरोध किया।

निम्नलिखित संकलक प्लगइन दो बार निष्पादित classfiles, द्वारा की पहचान के दो अलग सेट का निर्माण करने के लिए क्या कहा जाता है के लिए होगा एक classifier (मूल रूप से, Maven के लिए एक मार्कर को पता है कि आप जब एक ही परियोजना का उत्पादन कर सकते का उल्लेख कई कलाकृतियों)।

मोटे तौर पर, कुछ की तरह:

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
     <configuration> 
      <source>1.3</source> 
      <target>1.5</target> 
      <fork>true</fork> 
      <classifier>jdk5</classifier> 
     </configuration> 
     </execution> 
     <execution> 
     <configuration> 
      <source>1.3</source> 
      <target>1.6</target> 
      <fork>true</fork> 
      <classifier>jdk6</classifier> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

नोट है कि लोगों को कभी कभी, profiles के प्रयोग पर classifier s का उपयोग करके पर भ्रूभंग, वे के रूप में के रूप में वे संभवतः मतलब हो सकता है कि अपनी परियोजना कई परियोजनाओं में scinded किया जाना चाहिए या कि आप कर रहे हैं अपने निर्माण की पोर्टेबिलिटी को नुकसान पहुंचा रहा है।

3

जैसा कि हैलेम ने सुझाव दिया है कि आपको इसे दो चरणों में करने की आवश्यकता होगी, एक संकलन के लिए और एक जार के लिए।

संकलक के लिए

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
     <configuration> 
      <source>1.3</source> 
      <target>1.5</target> 
      <fork>true</fork> 
      <outputDirectory>${project.build.outputDirectory}_jdk5</outputDirectory> 
     </configuration> 
     </execution> 
     <execution> 
     <configuration> 
      <source>1.3</source> 
      <target>1.6</target> 
      <fork>true</fork> 
      <outputDirectory>${project.build.outputDirectory}_jdk6</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

और फिर जार प्लगइन

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.3.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classesDirectory>${project.build.outputDirectory}_jdk5</classesDirectory> 
       <classifier>jdk5</classifier> 
      </configuration> 
      </execution> 
      <execution> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classesDirectory>${project.build.outputDirectory}_jdk6</classesDirectory> 
       <classifier>jdk6</classifier> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

आप तो आवश्यक जार का उल्लेख कर सकते अपनी निर्भरता के लिए एक <classifier> तत्व जोड़कर के लिए। जैसे

<dependency> 
    <groupId>br.com.comp.proj</groupId> 
    <artifactId>proj-cryptolib</artifactId> 
    <version>0.0.4-SNAPSHOT</version> 
    <classifier>jdk5</classifier> 
</dependency> 
+0

महान जवाब! केवल आईएमएचओ के सवाल का सही जवाब है। –

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

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