Question

J'ai été me cogner la tête contre un mur pendant environ une heure à ce sujet: Je suis en train de passer une propriété simple (java.library.path) à plugin exec-maven. L'objectif est d'avoir à intégrer avec le fichier Netbeans Clic droit> Exécuter la procédure de fichier.

Je me suis donc mon POM comme ceci:

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

(j'utilise une ancienne version que je puisse voir l'exécution args, mais son entièrement reproductible avec 1.2)

Ensuite, je clique droit mon fichier et cliquez sur « Exécuter fichier ». Netbeans commence ce processus:

 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

(L'exécution classpath plein d'origine a été changé pour exec:exec alors espérons ma configuration appliquée)

Mais ma variable d'environnement est apparemment ignoré, comme le programme exécuté résultant est:

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

J'ai essayé

  • Utilisation de balises séparées clés et valeur dans une balise enviornmentVariable
  • Utilisez une balise clé et la valeur directement dans une balise enviornmentVariables (la peine d'essayer)
  • liaison à une phase
  • passer comme Maven arg et en utilisant exec: java à la place
  • Passage -Djava.library.path = natif / win32-x86 comme argument d'exécution et de l'option VM dans la page de configuration du projet

et tous ont échoué. Je suis vraiment à une perte ici.

Je suppose que cela est l'inconvénient d'utiliser JNI Maven. Vous devez passer comme argument à vos tests, votre runtime, votre course module POM, et votre POM parent

Ma question: Comment puis-je passer une propriété java.library.path à un fichier exécuté? Ce serait bien si elle intégrée avec Netbeans Run fonctionnalité de fichier (à cet effet, je ne dois pas changer le nom de la classe dans un POM, construire, puis exécutez)

Était-ce utile?

La solution

Ne savait pas, mais apparemment quand vous le faites, vous avez besoin de mettre d'abord cette propriété. Je ne pensais pas qu'il était nécessaire puisque le classpath n'est pas exécuté immédiatement, mais apparemment il fait une différence.

Pour résoudre ce problème, j'ai simplement changé dans ce projet Propriétés> Actions> Exécuter fichier via principal

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

La raison pour laquelle vous ne pouvez pas specifcy dans le POM est que NB passe le chemin de classe et que son exécution via la ligne de commande exec.args, qui remplace ce qui est dans votre POM.

Bien que cela puisse être laid et dépendant de la plateforme, ce qui se passe son lorsque vous mélangez JNI et Maven. Il n'y a pas vraiment une autre façon que je peux voir.

Autres conseils

Je ne sais pas si vous avez essayé cela, mais aussi longtemps que vous devez bien ensemble au niveau de la machine virtuelle Java, il doit être fait avec -Djava.library.path=/some/path

Ainsi, afin de spécifier pour exec-maven-plugin vous pouvez écrire quelque chose comme ceci:

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

Vous avez besoin, bien sûr, de mettre à jour le fichier exécutable et peut-être ajouter un autre attribut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top