Pregunta

He estado golpeando mi cabeza contra una pared alrededor de una hora en este: Estoy tratando de pasar una propiedad sencilla (java.library.path) a exec-maven-plugin. El objetivo es que se integre con el archivo Haga clic Netbeans derecho> Ejecutar procedimiento del archivo.

Así que me puse mi POM como esto:

<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>

(utilizo una versión antigua para que pueda ver los args de ejecución, pero su completamente reproducible con 1,2)

Luego haga clic derecho mi archivo y haga clic en "Archivo Ejecutar". Netbeans se inicia este proceso:

 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

(La ejecución ruta de clases original completo fue cambiado a exec:exec así que espero que la configuración de mi aplica)

Pero mi variable de entorno es aparentemente ignorado, ya que el programa ejecutado resultante es:

 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'.

He intentado

  • El uso de identificadores de clave y valor separados dentro de una etiqueta enviornmentVariable
  • Usar una clave y valor de la etiqueta directamente dentro de una etiqueta enviornmentVariables (vale la pena intentarlo)
  • unión a una fase
  • pasando como un experto arg y el uso de exec: java en lugar
  • Pasando Djava.library.path = nativo / win32-x86 como un argumento de ejecución y la opción de VM en la página Configuración del proyecto

y todos han fracasado. Estoy realmente en una pérdida aquí.

Creo que esta es la desventaja de usar JNI en maven:. Usted tiene que pasar como argumento para sus pruebas, su tiempo de ejecución, el POM módulo de estreno y su padre POM

Así que mi pregunta: ¿Cómo se puede pasar una propiedad java.library.path a un fichero ejecutado? Sería bueno si se integra con la funcionalidad del archivo Netbeans Run (para ello no tengo que cambiar el nombre de la clase en un POM, acumulación, a continuación, ejecutar)

¿Fue útil?

Solución

No sé esto, pero parece que al hacer esto es necesario poner por primera vez esta propiedad. Yo no creo que era necesario ya que la ruta de clases no se ejecuta inmediatamente, pero parece ser que hace la diferencia.

Para solucionarlo, simplemente cambiaron esto en Propiedades del proyecto> Acciones> Ejecutar archivo a través principal

exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java

La razón por la que no se puede specifcy en el POM es que NB pasa la ruta de clase y lo que su ejecución a través de exec.args línea de comandos, lo que anula cuál está en su POM.

Si bien esto puede ser feo y dependientes de la plataforma, es lo que pasa cuando se mezcla JNI y Maven. En realidad no hay otra manera de que yo pueda ver.

Otros consejos

No está seguro de si se trató de esto, pero todo el tiempo que necesita la propiedad conjunto en un nivel de JVM se debe hacer con -Djava.library.path=/some/path

Así que con el fin de especificar que para la ejecución Maven-plugin que podría escribir algo como esto:

<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>

Es necesario, por supuesto, para actualizar el ejecutable y tal vez añadir otros atributos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top