Rust Invoke Java Server über Maven unter Windows ohne "Batch -Job" -Meldung, wenn sie gestoppt werdenJava

Java-Forum
Anonymous
 Rust Invoke Java Server über Maven unter Windows ohne "Batch -Job" -Meldung, wenn sie gestoppt werden

Post by Anonymous »

Ich schreibe eine CLI in Rost und möchte, dass sie unter Windows oder Linux funktioniert. Ich möchte, dass es Maven aufruft, um ein Java -Programm durchzuführen. Ich habe bereits in einem Bash -Skript gearbeitet, das ich über Git Bash aufrufen kann. Es sieht so aus: < /p>

Code: Select all

execMainClass=${args[1]}
execArgs=("${args[@]:2}")
mvn exec:java -Dexec.mainClass="$execMainClass" -Dexec.args="${execArgs[*]@Q}" \
-Dexec.cleanupDaemonThreads=false --quiet
Das Java -Programm startet wiederum einen lokalen Server, den ich mit Strg+C aufhören muss. Sobald ich das tue, geht die Kontrolle sofort zurück zu Git Bash. Ich möchte nur das alles in Rost reproduzieren, und nach dem, was ich lese, sollte nichts besser sein als Rost, um eine CLI zu implementieren, die mit dem System interagiert. Hier ist, was die Dokumentation verwendet, um zu verwenden: < /p>

Code: Select all

return std::process::Command::new("cmd")
.args(["/C", "mvn", "exec:java"])
.arg(format!("-Dexec.mainClass={main_class}"))
.args(["-Dexec.cleanupDaemonThreads=false", "--quiet"])
.status();
< /code>
Wenn ich meine Rust -Cli ausführe, ruft es tatsächlich Maven auf, das dann mein Java -Programm ausführt, das einen lokalen Server startet! Wenn ich jedoch Strg+C < /code> drücke, um den lokalen Server zu stoppen, erhalte ich die folgende Nachricht: < /p>

Terminate batch job (Y/N)?
nope. Will das nicht. Ich dachte vielleicht, dass es aus Rost kommt, das irgendwie CMD aufruft. Also habe ich versucht, Maven direkt in die Rost-Cli aufzurufen: < /p>

Code: Select all

return std::process::Command::new("mvn")
.args(["exec:java"])
.arg(format!("-Dexec.mainClass={main_class}"))
.args(["-Dexec.cleanupDaemonThreads=false", "--quiet"])
.status();
< /code>
Leider ergibtError: program not found
, der aus meinem Fehlerhandling-Code an anderer Stelle in der CLI stammt:

Code: Select all

Err(e) => {
eprintln!("Error: {}", e);
std::process::exit(exitcode::SOFTWARE);
}
Basierend auf den Kommentaren hier wurde mir klar, dass Git Bash MVN auf dem Pfad findet, aber PowerShell findet stattdessen die Datei mvn.cmd Datei auf dem Pfad. Da Rost Git Bash insgesamt Nebenbeschwerden hat, habe ich mich so geändert, dass ich Mvn.cmd :
direkt aufgerufen habe

Code: Select all

return std::process::Command::new("mvn.cmd")
.args(["exec:java"])
.arg(format!("-Dexec.mainClass={main_class}"))
.args(["-Dexec.cleanupDaemonThreads=false", "--quiet"])
.status();
< /code>
Dadurch wird Maven sowohl in Git Bash als auch in PowerShell ausgeführt. Aber nachdem ich im Java -Programm Strg+C < /code> getroffen habe, bekomme ich immer noch: < /p>

Terminate batch job (Y/N)?
Noch schlimmer, in PowerShell bringt die Shell in einen seltsamen Zustand, in dem sie unregelmäßig auf Tastenanschläge und Hänge reagiert. Dies passiert, ob ich CMD/C MVN verwende… oder mvn.cmd… . Welchen Trick muss ich ziehen, um dies in Rost zu erreichen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post