2009-09-28 75 views
20
Maven目標

是否有可能從Java調用Maven目標,例如,我可以做相當於:從Java類從Java調用

mvn clean package 

感謝, 尼克

回答

19
+0

+1謝謝,我可能需要這一點。 – KLE 2009-09-28 16:13:17

+0

謝謝 - 這應該做的伎倆! – eldoctoro 2009-09-28 16:14:20

+5

這可能不再是正確的答案。看來Maven3嵌入器已經不存在了:http://stackoverflow.com/questions/4206679/can-anyone-give-a-good-example-of-using-org-apache-maven-cli-mavencli-programatt – jbandi 2012-09-20 21:12:57

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我無法管理使用「-f」標誌指定特定pom.xml

這對我來說相當不錯:

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

你的答案很舊,所以嵌入式maven的可能性已經提高。現在,'-f'選項非常有效,甚至可以嵌入maven。我使用了一個絕對路徑(從未嘗試過相對路徑)。 – djeikyb 2015-07-17 16:19:59

2

這是很容易:)

Java代碼

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