Ich habe ein Projekt konfiguriert, um mit Maven zu bauen und zu laufen. Das Projekt hängt von plattformspezifischen nativen Bibliotheken ab, und ich verwende die Strategie here, um diese Abhängigkeiten zu verwalten.Verwenden von Maven 'exec: exec' mit Argumenten
Im Wesentlichen sind die .dll
oder .so
Dateien für eine bestimmte Plattform in ein Jar verpackt und an den Maven-Server mit einem Klassifikator geschoben, der die Zielplattform identifiziert. Das maven-dependency-plugin entpackt dann das plattformspezifische jar und kopiert die nativen Bibliotheken in den Zielordner.
Normalerweise würde ich verwenden, um ein Java-Programm auszuführen, aber exec:java
läuft Anwendungen in der gleichen JVM wie Maven, die mich daran hindert, den Klassenpfad zu ändern. Da die nativen Abhängigkeiten dem Klassenpfad hinzugefügt werden müssen, muss ich stattdessen mvn exec:exec
verwenden. Dies ist der entsprechende Ausschnitt aus der pom:
...
<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 für die Standardkonfiguration der Anwendung gut, aber ich möchte in der Lage, einige optionale Parameter in der Befehlszeile angeben. Im Idealfall würde Ich mag so etwas tun:
mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>"
Leider überschreibt die exec.args
Variable unter Angabe der Argumente, die ich in der pom haben (die erforderlich sind, um die Classpath einzurichten und die Anwendung ausführen). Gibt es einen Weg dahin? Was ist der beste Weg, um einige optionale Argumente in der Befehlszeile anzugeben, ohne zu überschreiben, was ich in der Pom habe?
Und wie th Auf diese Argumente kann im Java-Code zugegriffen werden, ich meine diese Zeile: 'String [] args'? – zygimantus
@zygimantus Sie wollen 'mvn exec: java -Dexec.mainClass =" path.to.your.class "-Dexecs.args =" arg1 arg2 "' was außerhalb des Umfangs der ursprünglichen Frage ist. – dr0i