Java 在Maven测试(lwjgl)中获取本机JNI文件
我正在用LWJGL和Maven创建一个程序,并且正在为图形代码编写单元测试。我的问题是让Maven将本机二进制文件放在类路径上,以便测试能够获取它。我无法通过错误:Java 在Maven测试(lwjgl)中获取本机JNI文件,java,maven-2,java-native-interface,lwjgl,Java,Maven 2,Java Native Interface,Lwjgl,我正在用LWJGL和Maven创建一个程序,并且正在为图形代码编写单元测试。我的问题是让Maven将本机二进制文件放在类路径上,以便测试能够获取它。我无法通过错误: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path 我已经将二进制文件解包到target/libs/native/,但是测试无法将它们提取出来 这是我的pom: <project xmlns="http://maven.apache.org/P
java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
我已经将二进制文件解包到target/libs/native/,但是测试无法将它们提取出来
这是我的pom:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ziroby.kata</groupId>
<artifactId>app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<lwjgl.version>2.6</lwjgl.version>
</properties>
<repositories>
<repository>## Heading ##
<id>lwjgl</id>
<name>lwjgl</name>
<url>http://adterrasperaspera.com/lwjgl</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.2.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock-junit4</artifactId>
<version>2.5.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>${lwjgl.version}</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-util</artifactId>
<version>${lwjgl.version}</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-native</artifactId>
<version>2.6</version>
<type>pom</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-native</artifactId>
<version>${lwjgl.version}</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/libs/natives</outputDirectory>
<overWrite>true</overWrite>
</artifactItem>
</artifactItems>
</configuration>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.0.0
com.ziroby.kata
,但这似乎是在谈论资源,而不是JNI库(而且它不起作用)
相反的问题是:指定已经在类路径上的内容。surefire配置是否包括设置java库路径
例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemProperties>
<property>
<name>java.library.path</name>
<value>target/lib/natives/</value>
</property>
</systemProperties>
</configuration>
</plugin>
org.apache.maven.plugins
maven surefire插件
java.library.path
目标/库/本地人/
根据
surefire插件启动VM,然后在将控制权传递给junit测试类之前修改系统属性。这对于VM来说太晚了,它需要在初始化VM时设置java.library.path
因此,我们需要在启动时提供通往Surefire的路径。以下方面发挥了作用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<argLine>-Djava.library.path=${project.build.directory}/libs/natives/win32:${project.build.directory}/libs/natives/linux:${project.build.directory}/libs/natives/macosx:${project.build.directory}/libs/natives/solaris</argLine>
</configuration>
</plugin>
org.apache.maven.plugins
maven surefire插件
一旦
-Djava.library.path=${project.build.directory}/libs/natives/win32:${project.build.directory}/libs/natives/linux:${project.build.directory}/libs/natives/macosx:${project.build.directory}/libs/natives/solaris
。。。
...
...
0.0.6
...
...
...
org.apache.maven.plugins
maven surefire插件
一旦
-Djava.library.path=target/natives
com.googlecode.mavenatives
maven nativedependencies插件
${natives.version}
本地人
产生资源
复制
...
...
正如我在回答中提到的,这实际上设置路径太晚了。但这个答案让我在谷歌搜索中找到了我的答案。所以我给你赏金。我在“”上方有一个红色标记,不受m2e支持。你是如何改变的?这样的argLine
也适用于。
...
<project ...>
...
<properties>
...
<natives.version>0.0.6</natives.version>
<properties>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<argLine>-Djava.library.path=target/natives</argLine>
</configuration>
</plugin>
<plugin>
<groupId>com.googlecode.mavennatives</groupId>
<artifactId>maven-nativedependencies-plugin</artifactId>
<version>${natives.version}</version>
<executions>
<execution>
<id>unpacknatives</id>
<phase>generate-resources</phase>
<goals>
<!--suppress MavenModelInspection (this line is for IDEA)-->
<goal>copy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
...
</project>