Ron*_*ero 5 java java-native-interface maven-2 lwjgl
我正在用LWJGL和Maven创建一个程序,我正在为图形代码编写单元测试.我的问题是让Maven将原生二进制文件放在类路径上,这样测试就可以把它拿起来.我无法克服错误:
java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
Run Code Online (Sandbox Code Playgroud)
我已经将二进制文件解压缩到目标/ 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>
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Maven - 在执行测试时将目录添加到classpath,但这似乎是在谈论资源,而不是JNI库(并且它不起作用).
而Specifiy类路径Maven的是相反的问题:指定的东西都已经在类路径上.
Ron*_*ero 14
根据http://maven.40175.n5.nabble.com/Trouble-with-Java-Native-Libraries-td114063.html,
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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5430 次 |
最近记录: |