2009-07-31 17 views
22

के लिए विभिन्न मेवेन कंपाइलर संस्करण मैं अपने मुख्य कोड के लिए जावा टेस्ट कोड और जावा 1.4 के लिए जावा 5 का उपयोग करने के लिए मेवेन कंपाइलर को कैसे कॉन्फ़िगर कर सकता हूं?परीक्षण और मुख्य

उत्तर

24

यदि आप प्रासंगिक जावा संस्करण का अनुपालन सेट करना चाहते हैं, तो आप प्रत्येक निष्पादन के लिए कंपाइलर प्लगइन को कॉन्फ़िगर कर सकते हैं। मान लीजिए मैवेन आपके द्वारा निर्दिष्ट उच्चतम संस्करण के रूप में कम से कम एक जेडीके का उपयोग कर रहा है। गुण का उपयोग कर आप कमांडलाइन पर या एक बच्चे में है कि विन्यास ओवरराइड कर सकते हैं अगर जरूरत:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <source>${compileSource}</source> 
    <target>${compileSource}</target> 
    </configuration> 
    <executions> 
    <execution> 
     <id>test-compile</id> 
     <phase>process-test-sources</phase> 
     <goals> 
     <goal>testCompile</goal> 
     </goals> 
     <configuration> 
     <source>${testCompileSource}</source> 
     <target>${testCompileSource}</target> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
... 
<properties> 
    <compileSource>1.4</compileSource> 
    <testCompileSource>1.5</testCompileSource> 
</properties> 

आप अलग अलग कम्पाइलरों के उपयोग से मतलब हैं, कि थोड़ा और अधिक शामिल है। क्योंकि आपको जेडीके के पथ और आप किस कंपाइलर संस्करण का उपयोग कर रहे हैं, को निर्दिष्ट करने की आवश्यकता है। फिर इन गुणों में परिभाषित किया जा सकता है। हालांकि आप उन्हें अपने settings.xml

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <source>${compileSource}</source> 
    <target>${compileSource}</target> 
    <executable>${compileJdkPath}/bin/javac</executable> 
    <compilerVersion>${compileSource}</compilerVersion> 
    </configuration> 
    <executions> 
    <execution> 
     <id>test-compile</id> 
     <phase>process-test-sources</phase> 
     <goals> 
     <goal>testCompile</goal> 
     </goals> 
     <configuration> 
     <source>${testCompileSource}</source> 
     <target>${testCompileSource}</target> 
     <executable>${testCompileJdkPath}/bin/javac</executable> 
     <compilerVersion>${testCompileSource}</compilerVersion> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
... 
<properties> 
    <compileSource>1.4</compileSource> 
    <testCompileSource>1.5</testCompileSource> 
    <compileJdkPath>path/to/jdk</compileJdkPath> 
    <testCompileJdkPath>path/to/test/jdk<testCompileJdkPath> 
</properties> 

नोट में परिभाषित करने के लिए चाहते हो सकता है यह समझ बनाने के हो सकता है इतना है कि अपने सामान्य बनाता गुण पर भरोसा नहीं करते संकलक विन्यास प्रोफाइल में, प्रत्येक JDK आप समर्थन के लिए एक, परिभाषित करने के लिए सेट किया जा रहा है

इसके अलावा, Maven 3.x में , आप fork पैरामीटर शामिल करने के लिए जब निष्पादन को निर्दिष्ट की जरूरत है, जैसे:

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <executions> 
     <execution> 
     <id>default-testCompile</id> 
     <phase>test-compile</phase> 
     <goals> 
      <goal>testCompile</goal> 
     </goals> 
     <configuration> 
      <fork>true</fork> 
      <executable>${testCompileJdkPath}/bin/javac</executable> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration>    
     </execution> 
    </executions> 
    </plugin> 
+0

जब मैं परीक्षण के लिए स्रोत और लक्ष्य संस्करण '1.8' और' मुख्य कोड के लिए 1.7' साथ पहला उदाहरण प्रयास, संकलन सफल होता है जब 'mvn compile' था 'एमवीएन टेस्ट-कंपाइल' से अलग से चलाया जाता है, लेकिन 'एमवीएन संकलन परीक्षण-संकलन' जैसे कमांडों में, या अधिक आसानी से, 'एमवीएन टेस्ट-कंपाइल' (जहां 'संकलन' खींचा जाता है) ' 1.7 के साथ मुख्य कॉन्फ़िगरेशन 'प्राथमिकता लेता है, और यह विफल रहता है। –

+2

समाधान यह है कि यह ' डिफ़ॉल्ट-परीक्षण कॉम्पाइल 'है जो डिफ़ॉल्ट व्यवहार को ओवरराइड करता है। उपरोक्त उत्तर एक अतिरिक्त निष्पादन जोड़ता है। –

+0

निष्पादन के बारे में समझ की कमी को क्षमा करें। क्या यह मुख्य अनुप्रयोग कोड को उसी लक्ष्य संस्करण में संकलित करने के लिए परीक्षण कोड के रूप में परीक्षण कोड के रूप में संकलित किया जाएगा? या मुख्य और परीक्षण स्रोतों के पास विभिन्न लक्ष्य बाइटकोड संस्करण होंगे? –

9

मैं स्वीकार किए जाते हैं जवाब संकलन जावा 7 स्रोत और जावा 8 के साथ कोई किस्मत ने maven-compiler-plugin, संस्करण 3.5.1 का उपयोग कर परीक्षण स्रोत। चूंकि संकलन प्लगइन दोनों मुख्य और परीक्षण स्रोतों के लिए स्रोत/लक्ष्य पैरामीटर का उपयोग करता है।

लेकिन मुझे पता चला, परीक्षण स्रोत और लक्ष्य के लिए अलग कॉन्फ़िगरेशन पैरामीटर हैं।

मेरे लिए

तो समाधान है कि काम किया

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <testSource>1.8</testSource> 
       <testTarget>1.8</testTarget> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
संबंधित मुद्दे