Frage

Ich habe meinen Kopf gegen eine Wand hämmern wurde für etwa eine Stunde auf diesem: Ich versuche, eine einfache Eigenschaft (java.library.path) zu exec-maven-plugin zu übergeben. Das Ziel ist es, mit Netbeans Rechtsklick Datei> Ausführen Datei-Verfahren integrieren zu haben.

gesetzt, damit ich meine POM wie folgt aus:

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

(ich benutze eine alte Version, damit ich die Ausführung args sehen kann, aber seine vollständig reproduzierbar mit 1.2)

Dann rechts ich meine Datei klicken und dann auf „Run File“. Netbeans startet diesen Prozess:

 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

(Die ursprüngliche volle Classpath Ausführung geändert wurde so hoffentlich exec:exec meine Konfiguration angewandt)

Aber meine Umgebungsvariable scheinbar ignoriert wird, da das resultierende ausgeführte Programm ist:

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

Ich habe versucht,

  • Die Verwendung separater Schlüssel und Wert-Tags innerhalb einer enviornmentVariable Tag
  • Verwenden Sie einen Schlüssel und Wert-Tag direkt innerhalb eines enviornmentVariables-Tag (einen Versuch wert)
  • Bindung an eine Phase
  • vorbei als ein Maven-Arg- und mit exec: java statt
  • Passing -Djava.library.path = native / win32-x86 als Run Argument und VM-Option in Projektkonfiguration Seite

und alle sind gescheitert. Ich bin wirklich ratlos hier.

Ich denke, das ist der Nachteil von JNI in maven. Sie müssen Ihre Tests als Argument übergeben, Ihre Laufzeit, Ihr Modul Lauf POM, und Ihre Eltern POM

Also meine Frage: Wie kann ich passieren eine java.library.path Eigenschaft auf eine ausgeführte Datei? Es wäre schön, wenn es mit Netbeans Run Datei-Funktionalität integriert (dafür ich die Klassennamen nicht in einem POM ändern muß, zu bauen, dann laufen)

War es hilfreich?

Lösung

Kannte dies nicht, aber anscheinend, wenn dies zu tun müssen Sie zunächst diese Eigenschaft setzen. Ich habe es nicht nötig war, da der Classpath nicht sofort ausgeführt wird, aber offenbar macht es einen Unterschied machen.

Um es zu beheben, habe ich einfach verändern dies in Projekteigenschaften> Aktionen> Ausführen Datei über Haupt

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

Der Grund, warum Sie nicht in der POM specifcy kann ist, dass NB die Classpath geht und was seine Ausführung über die Befehlszeile exec.args, das was in Ihrem POM außer Kraft setzt.

Während dies hässlich und Plattform abhängig sein, das, was passiert, wenn Sie JNI und Maven mischen. Es ist nicht wirklich eine andere Art und Weise, dass ich sehen kann.

Andere Tipps

Nicht sicher, ob man dies versucht, aber so lange, wie Sie auf einem Niveau von JVM Satz Eigenschaft benötigen sollte es mit -Djava.library.path=/some/path erfolgen

Also, um es zu spezifizieren für exec-maven-Plugin Sie so etwas schreiben könnte:

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

Sie müssen sich natürlich die ausführbare Datei zu aktualisieren und vielleicht weitere Attribute hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top