क्या जावा से मेवेन लक्ष्यों को कॉल करना संभव है, उदाहरण के लिए, क्या मैं जावा क्लास सेजावा से मेवेन लक्ष्यों को बुलाओ
mvn clean package
के बराबर कर सकता हूं?
धन्यवाद, निक
क्या जावा से मेवेन लक्ष्यों को कॉल करना संभव है, उदाहरण के लिए, क्या मैं जावा क्लास सेजावा से मेवेन लक्ष्यों को बुलाओ
mvn clean package
के बराबर कर सकता हूं?
धन्यवाद, निक
बिल्कुल, आप Maven Embedder API उपयोग करने के लिए की जरूरत है।
अपडेट किया गया लिंक http://maven.apache.org/ref/3-LATEST/maven-embedder/index.html
मैं MAVEN 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;
}
आपका उत्तर पुराना है, इसलिए संभवतः एम्बेडेड मेवेन में सुधार हुआ है। अब, '-f' विकल्प एम्बेडेड मैवेन के साथ भी शानदार रूप से काम करता है। मैंने एक पूर्ण पथ का उपयोग किया (कभी सापेक्ष पथ की कोशिश नहीं की है)। – djeikyb
यह आसान है :)
जावा कोड
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
+1 धन्यवाद, मुझे लगता है कि आवश्यकता हो सकती है। – KLE
धन्यवाद - यह चाल चलाना चाहिए! – eldoctoro
यह अब सही उत्तर नहीं हो सकता है। ऐसा लगता है कि मेवेन-एडेडर मैवेन 3 से चला गया है: http://stackoverflow.com/questions/4206679/can-anyone-give-a-good-example-of-using-org-apache-maven-cli-mavencli-programatt – jbandi