Передача переменную Enornnment для выполненного процесса в Maven
-
08-10-2019 - |
Вопрос
Я ударил голову против стены около часа на этом: я пытаюсь пройти простую собственность (java.library.path
) для Exec-Maven-Plugin. Цель состоит в том, чтобы она интегрировалась с NetBeans правой кнопкой мыши файл> Процедура выполнения файла.
Итак, я понравился как это:
<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>
(Я использую старую версию, чтобы я мог видеть исполнение args, но его полностью воспроизводимо с 1.2)
Тогда я щелкните мой файл и нажмите «Запустить файл». NetBeans начинает этот процесс:
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
(Оригинальное выполнение полного класса было изменено на exec:exec
Так, надеюсь, моя конфигурация применена)
Но моя переменная окружающей среды, по-видимому, игнорируется, так как полученная выполненная программа:
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'.
я пробовал
- Использование отдельных тегов ключа и значения внутри метка EnviornmentVariable
- Используйте ключ и тег ценности непосредственно внутри тега EnviornmentVariables (стоит попробовать)
- Привязка к фазе
- Прохождение как Maven Arg и использование Exec: Java вместо
- Passing -djava.library.path = Nature / Win32-X86 в качестве аргумента RUN и опция VM на странице конфигурации проекта
И все потерпели неудачу. Я действительно в потере здесь.
Я предполагаю, что это недостаток использования JNI в Maven: вы должны пройти в качестве аргумента для ваших тестов, ваше время выполнения, ваш модуль запускает POM и ваш родительский POM.
Итак, мой вопрос: как я могу пройти java.library.path
Свойство в выполненный файл? Было бы здорово, если он интегрирован с функциональными возможностями файла NetBeans (их не нужно менять имя класса в POM, построить, затем запустить)
Решение
Не знал этого, но, по-видимому, когда это нужно сначала поставить это свойство. Я не думал, что это необходимо, так как класс не будет немедленно выполнен, но, по-видимому, это имеет значение.
Чтобы исправить это, я просто изменил это в Project Properties> Действия> Запустите файл через основной
exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java
Причина, по которой вы не можете специфироваться в POM, заключается в том, что Nb передает классу и какое его выполнение через командную строку exec.args
, который переопределяет что в вашем пом.
Хотя это может быть уродливая и зависимая платформа, это то, что происходит, когда вы смешиваете JNI и Maven. Там не совсем другой способ, которым я могу видеть.
Другие советы
Не уверен, что вы пробоваете это, но до тех пор, пока вам нужно установить свойство на уровне JVM, это должно быть сделано с -Djava.library.path=/some/path
Поэтому для того, чтобы указать его для Exec-Maven-Plugin, вы можете написать что-то вроде этого:
<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>
Вам нужно, конечно, чтобы обновить исполняемый файл и, возможно, добавить еще один атрибуты.