Передача переменную Enornnment для выполненного процесса в Maven

StackOverflow https://stackoverflow.com/questions/3951818

Вопрос

Я ударил голову против стены около часа на этом: я пытаюсь пройти простую собственность (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>

Вам нужно, конечно, чтобы обновить исполняемый файл и, возможно, добавить еще один атрибуты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top