Q
從Java調用
20
A
回答
19
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>
相關問題
- 1. 從MATLAB調用Java?
- 2. 從Java調用1.4
- 3. 調用Java從C++
- 4. 從Java調用PowerShell
- 5. 從Java調用SSJS?
- 6. 從java調用perl
- 7. 從PHP調用Java
- 8. 從Python調用Java
- 9. 從Java調用rscript
- 10. 從GWT調用java
- 11. 從Java調用C++
- 12. 從Mathematica調用java項目
- 13. 如何從Java調用Perl?
- 14. 如何從Java調用
- 15. 從PHP調用Java程序
- 16. 從Flex調用Java Applet
- 17. 從Java調用Javascript - Android
- 18. 從Groovy調用Java Apache StringUtils.join()
- 19. 從perl調用java類
- 20. 從Java調用Python模塊
- 21. 從Clojure調用java函數
- 22. 從Java調用Scala代碼?
- 23. 從javascript調用java類
- 24. 異步從Java調用Python
- 25. 從java調用R腳本
- 26. 從Java調用Web服務
- 27. 如何從Java調用C++?
- 28. 從Java調用Restful服務
- 29. 從Java調用Oracle「DEFINE」
- 30. 從網頁調用Java庫
+1謝謝,我可能需要這一點。 – KLE 2009-09-28 16:13:17
謝謝 - 這應該做的伎倆! – eldoctoro 2009-09-28 16:14:20
這可能不再是正確的答案。看來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