Передача переменной окружения исполняемому процессу в Maven - PullRequest
4 голосов
/ 17 октября 2010

Вот уже около часа я бьюсь головой об стену: я пытаюсь передать простое свойство (java.library.path) exec-maven-plugin.Цель состоит в том, чтобы интегрировать его с файлом правого клика Netbeans> Процедура запуска файла.

Поэтому я установил свой POM следующим образом:

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

(я использую старую версию, чтобы видетьАргументы выполнения, но полностью воспроизводимые с 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

(Исходное полное выполнение classpath было изменено на 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'.

Я пробовал

  • Использование отдельных тегов Key и Value внутри тега enviornmentVariable
  • Использование тега ключа и значения непосредственно внутриТег enviornmentVariables (стоит попробовать)
  • привязка к фазе
  • , проходящая как maven arg и использующая вместо этого exec: java
  • Passing -Djava.library.path = native /win32-x86 в качестве аргумента Run и опции VM на странице конфигурации проекта

, и все они потерпели неудачу.Я действительно в растерянности.

Я полагаю, что это недостаток использования JNI в maven: вы должны передать в качестве аргумента свои тесты, время выполнения, модуль POM, запускаемый POM, и родительский POM..

Итак, мой вопрос: как я могу передать свойство java.library.path в исполняемый файл?Было бы хорошо, если бы он интегрировался с функциональностью Netbeans Run File (для этого мне не нужно менять имя класса в POM, строить, затем запускать)

Ответы [ 2 ]

6 голосов
/ 20 октября 2010

Не знал этого, но, видимо, при этом вам нужно сначала указать это свойство.Я не думал, что это было необходимо, поскольку путь к классам не выполняется сразу, но, по-видимому, он имеет значение.

Чтобы исправить это, я просто изменил это в «Свойствах проекта»> «Действия»> «Выполнить файл через Main»1003 *

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

Причина, по которой вы не можете указать его в POM, заключается в том, что NB передает classpath и его выполнение через командную строку exec.args, которая переопределяет то, что находится в вашем POM.

Хотя это может быть уродливо и зависеть от платформы, это то, что происходит, когда вы смешиваете JNI и Maven.На самом деле я не вижу другого способа увидеть это.

1 голос
/ 17 октября 2010

Не уверен, если вы пытались это сделать, но если вам нужно установить свойство на уровне 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>

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

...