Passando una variabile di ambiente per eseguire processo in Maven
-
08-10-2019 - |
Domanda
mi è stato sbattere la testa contro un muro per circa un'ora su questo: sto cercando di passare una semplice proprietà (java.library.path
) per exec-Maven-plugin. L'obiettivo è di averlo integrazione con NetBeans destro file clicca> Esegui procedura di file.
Così ho impostato la mia POM in questo modo:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<environmentVariables>
<java.library.path>native/win32-x86</java.library.path>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
(io uso una vecchia versione in modo da poter vedere le args di esecuzione, ma la sua pienamente riproducibili con 1,2)
Poi mi fate clic destro il file e fare clic su "File Run". Netbeans avvia questo processo:
W:\programming\apache-maven-2.2.1\bin\mvn.bat -Dexec.classpathScope=runtime -Dexec.args=-classpath %classpath org.quackedcube.camera.CameraDemo -Dexec.executable=C:\Program Files\Java\jdk1.6.0_21\bin\java.exe -Dnetbeans.execution=true -Dmaven.repo.local=W:\programming\maven-repo process-classes exec:exec
(L'esecuzione originale percorso di classe completo è stato cambiato in exec:exec
quindi spero la mia configurazione applicata)
Ma la mia variabile d'ambiente è apparentemente ignorato, come il programma eseguito risultante è:
Result of cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_21\bin\java.exe" -classpath *snip* org.quackedcube.camera.CameraDemo" execution is: '1'.
Ho provato
- L'uso dei nomi chiave ed un valore separati all'interno di un tag enviornmentVariable
- Utilizzare una chiave e tag di valore direttamente all'interno di un tag enviornmentVariables (la pena di provare)
- legandosi a una fase
- passando come un esperto di arg e utilizzando exec: java invece
- Passando -Djava.library.path = native / win32-x86 come argomento Run e l'opzione VM nella pagina di configurazione del progetto
e tutti hanno fallito. Sono davvero in perdita qui.
Credo che questo è lo svantaggio di usare JNI in Maven:. Devi passare come argomento per i test, il vostro tempo di esecuzione, il tuo POM modulo di corsa, e la vostra POM genitore
Quindi la mia domanda: Come è possibile passare una proprietà java.library.path
a un file eseguiti? Sarebbe bello se integrato con funzionalità di File Netbeans Run (Perciò non ho di cambiare il nome della classe in un POM, costruire, quindi eseguire)
Soluzione
non lo sapeva, ma a quanto pare quando si fa questo è necessario mettere prima questa proprietà. Non pensavo che fosse necessario in quanto il classpath non viene eseguito immediatamente, ma a quanto pare fa la differenza.
Per risolvere il problema, ho semplicemente cambiato questo in Proprietà progetto> Azioni> File Esegui via principale
exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java
Il motivo non è possibile specifcy nel POM è che NB passa il percorso di classe e ciò che la sua esecuzione tramite linea di comando exec.args
, che ignora che cosa è nel vostro POM.
Anche se questo potrebbe essere brutto e dipendenti dalla piattaforma, la sua cosa succede quando si mescolano JNI e Maven. Non c'è davvero un altro modo che posso vedere.
Altri suggerimenti
Non è sicuro se si è tentato questo, ma finché è necessario insieme di proprietà a livello di JVM dovrebbe essere fatto con -Djava.library.path=/some/path
Quindi, al fine di precisare per exec-Maven-plugin che si potrebbe scrivere qualcosa di simile:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Djava.library.path=${java.library.path}</argument>
</arguments>
</configuration>
</plugin>
È necessario, ovviamente, per aggiornare il file eseguibile e magari aggiungere altri attributi.