2009-09-28 12 views

उत्तर

19

बिल्कुल, आप Maven Embedder API उपयोग करने के लिए की जरूरत है।

अपडेट किया गया लिंक http://maven.apache.org/ref/3-LATEST/maven-embedder/index.html

+0

+1 धन्यवाद, मुझे लगता है कि आवश्यकता हो सकती है। – KLE

+0

धन्यवाद - यह चाल चलाना चाहिए! – eldoctoro

+5

यह अब सही उत्तर नहीं हो सकता है। ऐसा लगता है कि मेवेन-एडेडर मैवेन 3 से चला गया है: http://stackoverflow.com/questions/4206679/can-anyone-give-a-good-example-of-using-org-apache-maven-cli-mavencli-programatt – jbandi

1

मैं MAVEN CLI उपयोग करने के लिए है, क्योंकि इसे दूसरे तरीके से लाइन विकल्प को आदेश की तुलना काम करता है की सिफारिश नहीं होगा। उदाहरण के लिए:

CLI के साथ

, मैं "mvn dependency:resolve validate"

cli.doMain(
    new String[]{ 
     "dependency:resolve",  // download deps if needed 
     "validate"},    // just validates, no need even to compile 
     projectPath ... 

पुन: पेश करना चाहते हैं लेकिन असल में यह सब फ़ोल्डर (रिकर्सिवली) पर जाना होगा और यहां तक ​​कि अगर मैं इसे नहीं करना चाहती वहाँ सभी परियोजनाओं को मान्य करने की कोशिश करेंगे । अगर कुछ गलत है - यह विफल रहता है।

हैं, हालांकि, तो आप सिर्फ कमांड लाइन के साथ भी ऐसा करने की कोशिश - यह केवल pom.xm आह्वान और होगा खत्म सफलतापूर्वक (भले ही 'projectPath' अंदर कुछ परियोजना समाधान योग्य नहीं है

के साथ। CLI मैं विशेष pom.xml निर्दिष्ट करने के लिए "-f" झंडा उपयोग करने के लिए नहीं कर सके

यह मेरे लिए काफी अच्छा है:

private int resolveAsCommandLine() { 
     try { 

     String command = "mvn " + 
          "-f " + projectPath + "\\pom.xml " + 
          "-Dmaven.repo.local=" + localRepoPath + "\\repository " + 
          "-Dmaven.test.skip=true " + // ignore tests 
          "dependency:resolve " +  // download deps if needed 
          "validate"; 

      System.out.println("%> Executing command: '" + command + "'..."); 

      Process p = Runtime.getRuntime().exec(// "cmd - for windows only" 
        "cmd /c " + command 

      ); 


      BufferedReader in = new BufferedReader(
        new InputStreamReader(p.getInputStream())); 

      String line = ""; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
       if(line.contains("[ERROR]")) return ERROR_STATUS; 
       if(line.contains("BUILD FAILURE")) return ERROR_STATUS; 
       if(line.contains("BUILD SUCCESS")) return OK_STATUS; 
      } 
      in.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return ERROR_STATUS; 
     } 

     return ERROR_STATUS; 
    } 
+0

आपका उत्तर पुराना है, इसलिए संभवतः एम्बेडेड मेवेन में सुधार हुआ है। अब, '-f' विकल्प एम्बेडेड मैवेन के साथ भी शानदार रूप से काम करता है। मैंने एक पूर्ण पथ का उपयोग किया (कभी सापेक्ष पथ की कोशिश नहीं की है)। – djeikyb

2

यह आसान है :)

जावा कोड

MavenCli cli = new MavenCli(); 
cli.doMain(new String[]{"clean", "package"}, "project_dir", System.out, System.out); 

परियोजना विन्यास:

<dependencies> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-embedder</artifactId> 
     <version>3.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.aether</groupId> 
     <artifactId>aether-connector-wagon</artifactId> 
     <version>0.9.0.M2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.maven.wagon</groupId> 
     <artifactId>wagon-http-lightweight</artifactId> 
     <version>2.5</version> 
    </dependency> 
</dependencies> 

पूरी तरह से काम कर रहे उदाहरण: https://github.com/mariuszs/maven-cli-example

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