Verwendung von Maven 'exec: exec' mit Argumenten

Ich habe ein Projekt zum Erstellen und Ausführen mit Maven konfiguriert. Das Projekt hängt von plattformspezifischen nativen Bibliotheken ab und ich verwende die gefundene StrategieHier um diese Abhängigkeiten zu verwalten.

Im Wesentlichen die.dll oder.so Dateien für eine bestimmte Plattform werden in eine JAR-Datei gepackt und mit einem Klassifizierer, der die Zielplattform identifiziert, an den Maven-Server übertragen. Das Maven-Dependency-Plugin entpackt dann die plattformspezifische JAR und kopiert die nativen Bibliotheken in den Zielordner.

Normalerweise würde ich verwendenmvn exec:java ein Java-Programm ausführen, aberexec:java führt Anwendungen in derselben JVM wie Maven aus, wodurch ich den Klassenpfad nicht ändern kann. Da die nativen Abhängigkeiten zum Klassenpfad hinzugefügt werden müssen, muss ich verwendenmvn exec:exec stattdessen. Dies ist das relevante Snippet des Poms:

...
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-Djava.library.path=target/lib</argument>
            <argument>-classpath</argument>
            <classpath />
            <argument>com.example.app.MainClass</argument>
        </arguments>
    </configuration>
</plugin>
...

Dies funktioniert gut für die Standardkonfiguration der Anwendung, aber ich möchte in der Lage sein, einige optionale Parameter in der Befehlszeile anzugeben. Idealerweise würde ich gerne so etwas machen:

mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>"

Leider spezifizieren dieexec.args Variable überschreibt die Argumente, die ich in der POM habe (die erforderlich sind, um den Klassenpfad einzurichten und die Anwendung auszuführen). Gibt es einen Weg, dies zu umgehen? Was ist der beste Weg, um einige optionale Argumente in der Befehlszeile anzugeben, ohne das zu überschreiben, was ich in der pom habe?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage